|
|
1
1
有两个可能的原因:要么客户机编译器选择的重载与预期的不同,要么不同的编译器将重载放入不同的vtable条目中。 您传递/期望什么参数?过载解决可能是问题吗? 如果是vtable条目,那么可以尝试重命名重载。
在声明接口时,您是否尝试使用目标编译器上可用的任何COM机制——例如,使用
|
|
|
2
1
vtable中的功能顺序是 ABI . 不幸的是,ABI不是C++标准的一部分,所以不同编译器使用不同的ABIs是很常见的。 |
|
|
3
1
几年前我们遇到了这个问题。我现在找不到太多支持它的文档,但据我所知,Visual Studio组会重载vtable中的函数,即使它们是单独声明的。这导致我们的构建在gcc中工作正常,但在Visual Studio中崩溃。我相信我们最终只是移除了重载函数,因为我们没有找到解决方法。 |
|
|
4
0
它不必是错误的索引——它们的vtable中可以有完全不同大小的条目。除非他们的ABI匹配,否则无法保证任何事情都是一样的。当他们的ABI匹配时,这是有保证的。 可能的ABI是由GCC和英特尔的C++编译器使用的IA64 ABI,或者是微软引入的COM互操作。 |