我有一个objc程序,我想使用用objc ++编写的小部件(即https://launchpad.net/scintilla-cocoa)。我该怎么做?基本上我想要一个新的窗口控制器对象与这个objc ++库接口,以定义一个scintilla文本编辑器小部件。只需创建一个新的“objc类”并从那里访问库就会产生一系列与C ++ class
关键字相关的错误,等等。
提前致谢
答案 0 :(得分:3)
因为我是那个让你进入(希望奖励:-))使用 Scintilla 的麻烦的人,我在这里。
假设我们创建了一个名为ScintillaView
的{{1}}子类。
该文件应具有ppScintillaEditor
扩展名(例如.mm
)
代码大概就是这样......
<强>接口强>
ppScintillaEditor.mm
现在,对于实现部分,请记住使用一些初始化方法来正确设置视图(如Scintilla-cocoa附带的示例;我的意思是测试项目)
旁注:当然,您可以在#import "Scintilla/ScintillaView.h"
@interface ppScintillaEditor : ScintillaView
{
// your iVars
}
// your properties / methods / whatever
课程的顶部创建子类,类别或其他内容,几乎基于您的需求 - 例如,我有创建一个单独的类别只是为了将一些ScintillaView
特定命令分组(迟早,你会注意到对于一些更高级的Scintilla操作,虽然它在那里,它可能需要一些抛光来更多一点可可友好,所以你去......)
现在,最后但并非最不重要......
解决 ScintillaView
,正如我在其他视频回复中所显示的那样,您所要做的就是:
同时添加调试和发布:
"bunch of errors related to the C++ class keyword and so on"
就是这样。 : - )
提示:以上是由Scintilla定义的,以避免C和非C元素之间的冲突,如上所述......所以,只需要通知预处理器和其他部分照顾....
答案 1 :(得分:1)
您将创建一个objc类,它具有您的应用程序所需的接口,然后实现并添加ivars和实现 - 所有这些都在编译防火墙后面,因此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