我正在尝试使用一个使用 vtable 的 COM 库。然而,在我调用函数之后,堆栈发生了一些奇怪的事情,这告诉我我做错了什么。
带有 vtable 定义的头文件粘贴在此处:pastebin.com/m2d66c18c(特别参见从第 810 行开始的代码)。此处粘贴了一个示例:pastebin.com/m1b46e662。
该表正在填充函数的正确位置,但是当我调用函数时,它们似乎在错误的位置查找堆栈上的参数。此外,在调用表中的函数后,堆栈被弄乱了,我的程序崩溃了。我尝试将函数类型更改为两者__cdecl
,__stdcall
但这无济于事。
要么是我的代码,要么是库,编写库的公司还没有回复我——因为这是周末,我假设。此外,还有一个使用该库的演示应用程序,它可以工作——所以我认为这是我的代码/编译器 (gcc)/其他东西,而不是库。
是不是为了使用 COM 库,您需要做一些特别的事情?