5

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

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

4

1 回答 1

4

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

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

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

于 2010-11-27T05:18:53.660 回答