c++ - 对于 C++ 插件系统,什么是安全的?

标签 c++ api plugins compiler-construction

C++ 中的插件系统很难,因为 ABI 没有正确定义,并且每个编译器(或其版本)都遵循自己的规则。但是,Windows 上的 COM 表明,可以创建一个最小的插件系统,允许具有不同编译器的程序员使用简单的接口(interface)为主机应用程序创建插件。

让我们切合实际,暂时搁置在这方面没有多大帮助的 C++ 标准。如果我想为 Windows 和 Mac(以及可选的 Linux)编写一个支持 C++ 插件的应用程序,并且如果我想为插件作者提供相当多的编译器选择(比如不到 2 年的 Visual C++ 版本) 、GCC 或 Intel 的 C++ 编译器),我可以依靠 C++ 的哪些特性?

当然,我假设插件是为特定平台编写的。

以下是我能想到的一些 C++ 特性,我认为这就是答案:

  • vtable 布局,通过抽象类来使用对象? (是)
  • 内置类型、指针? (是)
  • 结构体、 union 体? (是)
  • 异常(exception)? (不)
  • 外部“C”函数? (是)
  • stdcall 具有内置参数类型的非外部“C”函数? (是)
  • 具有用户定义参数类型的非标准调用非外部“C”函数? (不)

如果您在该领域有任何经验可以分享,我将不胜感激。如果您知道任何具有 C++ 插件系统的成功应用程序,那也很酷。

卡尔

最佳答案

Dobb 博士的日记有一篇文章 Building Your Own Plugin Framework: Part 1这是关于这个主题的很好的阅读。这是一系列文章的开始,涵盖了 C/C++ 跨平台插件框架的架构、开发和部署。

关于c++ - 对于 C++ 插件系统,什么是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43322/

相关文章:

c++ - 访问冲突读取位置 : Linked List c++

C++ 多程序问题(rand、转换、崩溃)

python - Tweepy Twitter 获取特定用户的所有推文回复

c++ - 下面的初始化是如何良构的?

c++ - 在没有手动分配缓冲区的情况下使用 sprintf

ajax - 这个 session / token 身份验证系统对我的 Web api 有意义吗?

android - JSON 或 HTML : Designing my server side to reduce latency and support multiple clients

eclipse - 保证 Eclipse 插件启动顺序

plugins - 激活/添加按钮到tinyMCE

android-maven-plugin 在尝试创建 dex 时导致 java.lang.OutOfMemoryError