.so运行时可链接库作为插件;可可能力?

时间:2011-03-11 14:42:12

标签: cocoa macos plugins gcc shared-libraries

我正在为OSX图像处理应用程序编写插件接口。它的设计理念是插件应该尽可能简单,这样开发人员可以在看到示例代码的几分钟内进入并编写效果。为此,这些示例不需要或使用XCode;只是gcc。这一切都非常顺利,我们(一般来说)已经达到了所有的设计目标。我们实际上为插件生成UI,因此他们不必灵活地,不同地对插件进行线程和分段,管理其存储,在控制面板中的存在和位置等等,各种非常酷的东西。您可以在大约六行C代码中编写一个完全有效的插件。所以一切都很好。

现在,我现在开始关注开发人员打开CoCoa窗口可能需要的东西,如果他们需要比我们为他们生成的更复杂的界面。我发现我对CoCoa的内部工作知之甚少,而且我有时间在任何地方找到这个特定的问题,因为XCode通常会隐藏这种实现细节。所以这里(最后,抱歉)是我的问题:

对于想要打开CoCoa窗口的插件,我需要提供什么? CoCoa服务和资源是否有根句?或者他们只是链接到他们需要链接的东西并打开一个窗口?

现在,插件只接收指向非常特定的图像数据类型的指针。它们与操作系统无关。如果可能的话,我想把他们需要的句柄递给他们,以便打开一个CoCoa窗口,并以正常方式由OSX处理,无论可能是什么。或者,如果他们不需要任何东西,我想要一个明确的答案。对这个答案的参考将是非常好的,所以我可以从中学到它。

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

你不需要任何东西。他们必须链接到Cocoa框架并调用NSWindow上的方法。系统会自动完成这项艰苦的工作。

修改

如何使用模态窗口:

NSWindow *theWindow; // create this in code, get it from a variable, or load it from a nib
NSInteger result = [[NSApplication sharedApplication] runModalForWindow:theWindow];
if(result == 0) {
    // success, process input from window
} else if(result == NSRunStoppedResponse) {
    // stopped with -stopModal instead of stopModalWithCode:. Possibly success
} else if(result == NSRunAbortedResponse) {
    // stopped with -abortModal, probably an error
}


//This method is the action for a button on the window
- (IBAction)closeModalWindow:(id)sender {
    [[sender window] orderOut:nil];
    [[NSApplication sharedApplication] stopModalWithCode:0]; // The 0 will become the result of the runModalForWindow: method. You can use anything else instead
}