C++ 中的插件系统很难,因为 ABI 没有正确定义,并且每个编译器(或其版本)都遵循自己的规则。然而,Windows 上的 COM 表明,可以创建一个最小的插件系统,允许具有不同编译器的程序员使用简单的接口为主机应用程序创建插件。
让我们切合实际,暂时搁置在这方面没有多大帮助的 C++ 标准。如果我想为 Windows 和 Mac(以及可选的 Linux)编写一个支持 C++ 插件的应用程序,并且如果我想为插件作者提供相当多的编译器选择(比如不到 2 年的 Visual C++ 版本) 、GCC 或 Intel 的 C++ 编译器),我可以依靠 C++ 的哪些特性?
当然,我假设插件是为特定平台编写的。
在我的脑海中,这里有一些我能想到的 C++ 特性,我认为这就是答案:
- vtable 布局,通过抽象类使用对象?(是的)
- 内置类型,指针?(是的)
- 结构体,联合体?(是的)
- 例外?(不)
- 外部“C”函数?(是的)
- 具有内置参数类型的 stdcall 非外部“C”函数?(是的)
- 具有用户定义参数类型的非标准调用非外部“C”函数?(不)
如果您在该领域有任何经验可以分享,我将不胜感激。如果您知道任何具有 C++ 插件系统的成功应用程序,那也很酷。
卡尔