我有一個objc程序,我想使用一個用objC++編寫的小部件(即https://launchpad.net/scintilla-cocoa)。我如何去做這件事?基本上我想要一個新的窗口控制器對象與這個objC++庫接口來定義一個閃爍文本編輯器小部件。簡單地創建一個新的「objc類」並從那裏訪問庫會產生一堆與C++ class
關鍵字等相關的錯誤。如何將objc程序與objC++庫聯繫起來?
在此先感謝
我有一個objc程序,我想使用一個用objC++編寫的小部件(即https://launchpad.net/scintilla-cocoa)。我如何去做這件事?基本上我想要一個新的窗口控制器對象與這個objC++庫接口來定義一個閃爍文本編輯器小部件。簡單地創建一個新的「objc類」並從那裏訪問庫會產生一堆與C++ class
關鍵字等相關的錯誤。如何將objc程序與objC++庫聯繫起來?
在此先感謝
由於我把你帶入使用Scintilla的的(希望獎勵:-))麻煩誰的人,我在這裏。
比方說,我們創建了一個ScintillaView
子類,命名爲ppScintillaEditor
。 該文件應該有一個.mm
擴展(如ppScintillaEditor.mm
)
的代碼將大致是這樣的......
接口
#import "Scintilla/ScintillaView.h"
@interface ppScintillaEditor : ScintillaView
{
// your iVars
}
// your properties/methods/whatever
現在,作爲實施部分,請記住放置一些初始化方法來正確設置視圖(例如伴隨着Scintilla-cocoa;我的意思是測試項目)
旁註:當然,你可以創建子類,類別或任何在頂部ScintillaView
類,幾乎根據你所需要的 - 我舉個例子,有創建一個單獨的類別只是爲了你可以注意到,對於一些更先進的Scintilla操作,雖然它在那裏,但它可能需要一些拋光才能更可可友好,所以在這裏你去...)
現在,最後但並非最不重要......
要決心的"bunch of errors related to the C++ class keyword and so on"
,正如我在其他視頻迴應您的評論已經證明,所有你需要做的就是:
添加到這兩個調試和發佈:
SCI_NAMESPACE SCI_LEXER
就是這樣。 :-)
提示:上述由Scintilla的定義,以避免C和非C元素之間的衝突,像上面...因此,所需要的是,以通知預處理器,其餘是照顧....
,你會創造出具有界面的應用程序需要objc類,然後實現並添加實例變量和實施 - 一切的背後彙編防火牆,所以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
#進口「MONScintillaWrapper .H」
@implementation MONScintillaWrapper
{
scintilla::t_thing scintillaThing;
}
- (void)setBackgroundColor:(NSColor *)pColor
{
...convert pColor to a scintilla color and pass that to scintillaThing...
}
@end
對不起,我仍然有點綠色遵循這一點。我的實現是'.mm'文件或'.m'文件?目前它只是一個'.m'文件,我必須將它重命名爲'.mm'才能使用? – horseyguy 2012-04-22 09:19:42
yes - 此包裝器對象的'.mm'。然後在這裏聲明你的ivars(scintilla對象):'@implementation MONScintillaWrapper {scintilla :: t_thingy scintillaThingy; }'。這樣,你的程序的其餘部分不需要看你的scintilla ivars或C++源代碼。 – justin 2012-04-22 09:39:34
擴展答案來說明這種方法。 – justin 2012-04-22 09:46:59