私はobjcプログラムを持っており、私はobjC++で書かれたウィジェット(つまりhttps://launchpad.net/scintilla-cocoa)を使いたいと思っています。これについてどうすればいいですか?基本的には、新しいウィンドウコントローラーオブジェクトをこのobjC++ライブラリーとインターフェースして、シンチラのテキストエディターウィジェットを定義します。単純に新しい 'objcクラス'を作成し、そこからライブラリにアクセスすると、C++ class
というキーワードに関連する一連のエラーが生成されます。すべてのコンパイルファイアウォールの背後にObjC++ソースは、ヘッダに含まれていないので - 事前objC++ライブラリと私のobjcプログラムをどのようにインターフェースできますか?
答えて
私はScintillaのを使用しての(うまくいけばやりがい:-))トラブルにあなたを置く一人ですので、ここで私は。
我々はppScintillaEditor
という名前ScintillaView
サブクラスを作成しましょう。 ファイルが.mm
拡張子を持つべきである(例えばppScintillaEditor.mm
)コードは大体このようなものだ
...
今インターフェース
#import "Scintilla/ScintillaView.h"
@interface ppScintillaEditor : ScintillaView
{
// your iVars
}
// your properties/methods/whatever
、実装部分については、 (Scintilla-cocoaに付属の例のように、私はTestプロジェクトを意味します)
追記:もちろん、あなたはかなりあなたが必要なものに基づいて、サブクラス、カテゴリまたは上に何ScintillaView
クラスを作成することができます - 私を、例えば、単にするために、別々のカテゴリーを作成していいくつかのより高度なScintillaの操作については、そこにはありますが、もう少しココアに優しいものにするためには研磨が必要な場合があるので、ここに行きます。私はあなたのコメントに私の他の動画レスポンスに示してきたように)今
、少なくとも最後のではなく...
に解決"bunch of errors related to the C++ class keyword and so on"
、すべてあなたがしなければならないです:プロジェクトのビルド設定に
- ゴー
- アップルLL の下でVMコンパイラ3.0 - 前処理
- オプションプリプロセッサマクロ
デバッグとリリースの両方に追加します。
SCI_NAMESPACE SCI_LEXER
をそして、それはこれだけです。 :-)
ヒント:上記のよう...ので、それが取るすべては、プリプロセッサ、残りを通知することである上記は、CおよびC以外の要素間の衝突を避けるために、Scintillaのによって定義されますケアしています....
にあなたが実装し、追加アイバーズをし、実装した後、インターフェイスにアプリのニーズを持っているにObjCクラスを作成します
感謝。あなたの実装は必要な変換を提供します。
これはすでに行っているようですが、あなたのラッパーのヘッダーからscintillaヘッダーを削除します。これはラッパーの実装にのみ表示されます。
更新が
一つの可能なアプローチを説明するために:
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
- 1. がどのように今にObjC
- 2. MonoTouchバインディングobjcライブラリの問題(バインドされたobjcクラスから派生することはできません)
- 3. ARC /にObjC++:にObjCコンテナ
- 4. gdbのObjCランタイムとダイナミックアクセサにはどうなりますか?
- 5. vCardのパーサにObjC
- 6. XCodeのObjCリンカーフラグ
- 7. ObjC + Cocoaのコールバック
- 8. Swft @objc
- 9. にObjC iOS11:inputAccessoryView
- 10. カスタムUIColorインスタンス(ObjC)を使用しようとしています
- 11. ObjCでのUTTypeの作成
- 12. -fno-にObjCアークARC
- 13. enum in Objc> Swiftで宣言> Objcで使用される
- 14. Swift/ObjC circular import
- 15. ObjC - 自動ビューローテーション
- 16. iOS objc :: DenseMap performance
- 17. ios10 prepareForSegue popoverPresentationController ObjC
- 18. Javaのようにobjcでデコードする文字列
- 19. 特定のライブラリの-Objcフラグを無視する方法
- 20. Objc NSStringを別のものに設定するときのEXC_BAD_ACCESS
- 21. Xamarin WalkthroughはiOS ObjCライブラリをバインドしていますw NSInvalidArgumentExceptionエラー
- 22. -ObjCリンカ・フラグは何をしますか?
- 23. ObjCクラス識別子とコンパイラマジック?
- 24. ObjCブロックとopenssl Cコールバック
- 25. -rewrite-objcとObjective-C in clang
- 26. Cocoa/ObjCでBluetoothデバイスを「ペアにする」ことはできますか?
- 27. ObjC++のSwiftプロパティへのアクセス
- 28. IOS - ObjC - JSONString NSStringから
- 29. Swift 3 - dynamic vs @objc
- 30. ObjC Realmスレッディング問題
申し訳ありませんが、私はこれに従うためにまだ少し緑色です。私の実装は '.mm'ファイルか' .m'ファイルですか?現在のところ '.m'ファイルだけですが、これを動作させるには' .mm'に名前を変更する必要がありますか? – horseyguy
はい - このラッパーオブジェクトの '.mm'です。あなたのivars(scintillaオブジェクト)をここに宣言してください: '@implementation MONScintillaWrapper {scintilla :: t_thingy scintillaThingy; } '。この方法では、あなたのプログラムの残りの部分は、シンチラ・イヴァールやC++のソースを見る必要はありません。このアプローチを具体的に説明するために、 – justin
を展開しました。 – justin