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

标签 cocoa macos plugins gcc shared-libraries

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

不过现在,我将目光转向开发人员打开 CoCoa 窗口时可能需要的内容(如果他们需要比我们可以为他们生成的界面更复杂的界面)。我发现我对 CoCoa 的内部工作原理了解不够,并且我花了很长时间才找到任何地方解决了这个特定问题,因为 XCode 通常向您隐藏了此类实现细节。所以(最后,抱歉)我的问题是:

对于想要打开 CoCoa 窗口的插件,我需要向他们提供什么? CoCoa 服务和资源是否有根句柄?或者他们可以直接链接到他们需要链接的任何内容并打开一个窗口吗?

目前,该插件仅接收指向非常特定的图像数据类型的指针。它们与操作系统没有任何关系。如果可能的话,我想向他们提供他们需要的句柄,以便打开 CoCoa 窗口并让 OSX 以正常方式处理该窗口,无论是什么。或者,如果他们不需要任何东西,我想要一个明确的答案。如果能提供该答案的引用就太好了,这样我就可以通过任何方式了解它。

感谢您提供任何见解。

最佳答案

你什么都不需要。他们必须链接 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
}

关于cocoa - .so 运行时可链接库作为插件; cocoa 能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274305/

相关文章:

cocoa - 告诉 IKImageBrowserView 不要安排预加载

python - 什么 python 库用于 OSX 上的非阻塞音频 I/O?

java - 使用 Bukkit API 时如何访问服务器中的所有命令?

objective-c - 什么决定了解决未实现方法的过程?

objective-c - 将 NSImage 绘制到 NSView 子类中

cocoa - 纠正 NSView 内存泄漏

macos - 在 Mac 上编辑 .resx 文件

macos - 如何在 MacOS 上的 Araxis Merge 中更改字体大小以放大和缩小?

php - 在 wordpress 插件中使用 Composer 包

c# - 为 2 个不同的外部应用程序创建 2 组 .Net C# 插件,这些应用程序具有相同的 API(命名空间除外)