我应该在OSX上使用CFPlugin或dlopen()作为C ++插件吗?

时间:2015-10-22 05:03:52

标签: c++ macos plugins

我需要在OSX上创建一个插件库,它应该在运行时加载。该库主要使用C ++。插件需要表现的方式是程序将扫描目录并搜索插件。现在它需要从插件中获取一些信息(比如类型),并且需要根据它创建实例。

我搜索了选项,并为OSX获得了这两个选项 - dlopen()CFPlugindlopen()的优势在于我们不需要扩展我们的基本抽象类(如果我们使用CFPlugin,我们必须这样做)。缺点是我们需要在知道其类型之前加载库。

对于CFPlugin,Apple没有明确提到它是否在我们创建实例之前加载。我们可以调用CFPlugInFindFactoriesForPlugInTypeInPlugIn函数来了解所有能够创建实例的函数。但是,在搜索可用函数之前是否加载了插件?

1 个答案:

答案 0 :(得分:1)

最后继续dlopen()加载*.bundle插件。使用bundle的好处是*.plist应始终嵌入其中,并且可以从plist文件中获取加载bundle之前所需的任何信息。