从应用程序公开DLL的API

时间:2010-10-05 10:29:49

标签: c++

我正在为应用程序开发一个插件系统。我们的想法是从插件中加载一些函数(作为DLL加载),并在app中托管的脚本语言中使用这些函数。我必须公开DLL的API,以便它们与应用程序进行交互。 API可能会超时更改,旧的DLL不应失效。请给我一些线索阅读或请提出建议。感谢。

Duminda

4 个答案:

答案 0 :(得分:1)

将API暴露给插件的简单解决方案是让另一个“核心” - 库暴露API并将插件链接到它。这对插件开发者来说非常自然。

关于API更改:不得更改公共API,但只能扩展,例如添加到。没有破坏客户端就无法更改API。

这是一个关于不断变化的API的链接,而不会破坏客户端。它是Java,但大多数也适用于C ++。 http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs

请务必以二进制兼容方式更改API。在这方面C比C ++更容易,所以考虑使用C作为公共API。在C ++中,PIMPL-Idiom有帮助,但仍然无法添加新的虚拟方法。

答案 1 :(得分:1)

“行业标准”方式是利用SWIG(简化包装和接口生成器)来获取您的C / C ++代码并创建“高级”包装类,以便您的脚本语言可以访问您的C / C ++代码非常容易。

对于商业广告,SWIG也是免费的。

  

SWIG最常用于创建   高级解释或编译   编程环境,用户   接口,以及作为测试工具   和原型化C / C ++软件。痛饮   通常用于解析C / C ++   接口并生成'胶水   上述目标所需的代码   要调用C / C ++代码的语言。

答案 2 :(得分:0)

以下是一些想法:

  • 使API与C完全兼容。没有类,没有STL类型,所有函数都声明为extern "C"
  • 对于版本控制,将API版本号嵌入函数和结构名称中。版本发布后,如果没有破坏向后兼容性的风险,则无法更改函数签名和类型定义。
  • 为方便起见,您可以提供一组宏,它们将函数名称无版本号映射到版本化函数名称。当为新版本更新宏时,这不会破坏与旧版本的兼容性,但它会使客户端代码更容易阅读。

答案 3 :(得分:0)

COM非常适合您的需求。 它与语言无关,并且dll可以在运行时由应用程序加载。 为您的组件实现ActiveX也可以为脚本编写代码。
http://msdn.microsoft.com/en-us/library/ee663262(v=VS.85).aspx