4

私はobjcプログラムを持っていて、objc ++(つまり、https: //launchpad.net/scintilla-cocoa )で書かれたウィジェットを使用したいと思います。どうすればこれを行うことができますか?基本的に、新しいウィンドウコントローラーオブジェクトをこのobjc ++ライブラリとインターフェイスさせて、シンチラテキストエディターウィジェットを定義する必要があります。新しい「objcクラス」を作成し、そこからライブラリにアクセスするだけで、C++classキーワードなどに関連する一連のエラーが生成されます。

前もって感謝します

4

2 に答える 2

3

私はあなたをScintillaの使用の(うまくいけばやりがいのある:-))トラブルに巻き込んだ人なので、ここにいます。


ScintillaViewという名前のサブクラスを作成するとしますppScintillaEditor。ファイルには.mm拡張子が必要です(例ppScintillaEditor.mm

コードはおおまかに次のようになります...

インターフェース

#import "Scintilla/ScintillaView.h"

@interface ppScintillaEditor : ScintillaView
{
    // your iVars
}

// your properties / methods / whatever

ここで、実装部分については、ビューを適切に設定するための初期化メソッドを配置することを忘れないでください(Scintilla-cocoaに付属する例のように、テストプロジェクトを意味します)


補足:もちろん、ScintillaView必要なものにほぼ基づいて、サブクラス、カテゴリ、またはクラスの上にあるものを作成できます-たとえば、ScintillaView特定のコマンドをグループ化するために、別のカテゴリを作成しました(遅かれ早かれ、いくつかのより高度なScintilla操作では、そこにありますが、もう少しココアに優しいように研磨する必要があるかもしれないことに気付くでしょう、それでここに行きます...)


さて、最後になりましたが...

解決するには"bunch of errors related to the C++ class keyword and so on"、他のビデオで示したように、あなたのコメントへの応答として、あなたがしなければならないのは:

  • プロジェクトのビルド設定に移動します
  • AppleLLVMコンパイラ3.0の場合-前処理
  • オプションプリプロセッサマクロ
  • デバッグリリースの両方に追加:

    SCI_NAMESPACE SCI_LEXER
    

以上です。:-)


ヒント:上記は、上記のようにC要素と非C要素の衝突を避けるためにScintillaによって定義されています...したがって、必要なのはプリプロセッサに通知することだけで、残りは処理されます...。

于 2012-04-23T05:31:35.467 に答える
1

アプリに必要なインターフェイスを備えたobjcクラスを作成し、ivarを実装して追加し、実装します。これらはすべてコンパイルファイアウォールの背後にあるため、objc++ソースはヘッダーに含まれません。実装により、必要な変換が提供されます。

すでに行ったようですが、ラッパーのヘッダーからシンチラヘッダーを削除します。これらは、ラッパーの実装にのみ表示されます。

アップデート

1つの可能なアプローチを説明するために:

MONScintillaWrapper.h

// no c++/scintilla sources should be included in this header
#import <Foundation/Foundation.h>

@interface MONScintillaWrapper : NSObject

- (void)setBackgroundColor:(NSColor *)pColor;    

@end

MONScintillaWrapper.mm

#import "MONScintillaWrapper.h"

@implementation MONScintillaWrapper
{
  scintilla::t_thing scintillaThing;
}

- (void)setBackgroundColor:(NSColor *)pColor
{
...convert pColor to a scintilla color and pass that to scintillaThing...
}

@end
于 2012-04-22T09:10:19.777 に答える