我正在使用linux中的mingw和crosscompilation为Win32开发插件。虽然我的插件成功地由应用程序加载,我甚至从app获得了一个com界面,但我无法从那里调用函数 - 应用程序崩溃了。我认为这是由于mingw中接口实现的错误vtable对齐(这与MSVS完美配合)。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:4)
VTable对齐(实际上,整个VTable系统)完全依赖于实现。您必须使用相同的编译器,使用相同的开关/设置进行编译,以便在链接后拥有可用的程序。
由于这个原因,您无法将msvc生成的二进制文件与MinGW生成的二进制文件链接起来。即使你让表格对齐相同,名称修改算法也是不同的,没有人说两个编译器会为vtable本身的各个函数选择相同的顺序。
如果您需要两个编译器之间的可移植接口,那么您必须使用C(技术上为extern "C"
)接口,该接口具有标准化的ABI。