如何设置虚函数的对齐方式?

Vit*_*lov 5 c++ com mingw vtable

我正在使用linux中的mingw和crosscompilation为Win32开发插件.虽然我的插件成功地由应用程序加载,我甚至从app获得了一个com界面,但我无法从那里调用函数 - 应用程序崩溃了.我认为这是由于mingw中接口实现的错误vtable对齐(这与MSVS完美配合).

任何帮助将不胜感激,谢谢.

Bil*_*eal 4

VTable 对齐(事实上,整个 VTable 系统)完全依赖于实现。您必须使用相同的编译器,使用相同的开关/设置进行编译,以便在链接后获得可用的程序。

因此,您无法将 msvc 生成的二进制文件与 MinGW 生成的二进制文件链接。即使你让表对齐相同,名称修改算法也是不同的,并且没有人说两个编译器会为 vtable 本身内的各个函数选择相同的顺序。

extern "C"如果您需要两个编译器之间的可移植接口,那么您必须使用具有标准化 ABI 的C(技术上是 )接口来实现。