我有一个用 C++ 编写的应用程序,它加载我用 Delphi 编写的 DLL。应用程序调用 DLL 的导出函数并将指针传递给一个类的对象,该类具有我想从我的 Delphi DLL 调用的几个成员函数。我编写了一个与 C++ 类等效的 Delphi 类:
CClass = class
procedure A(param : Integer); virtual; abstract;
procedure B; virtual; abstract;
end
和 C++ 类看起来一样
class CClass {
public:
virtual void A(int) = 0;
virtual void B() = 0;
};
成员函数使用没有 Delphi 等效的 thiscall 调用约定。这可能意味着我需要使用汇编。我试过了:
function exported_procedure(ptr : CClass) : Integer; cdecl;
begin
asm
push ebx;
push esi;
mov ecx, ptr;
push 4;
call CClass.A;
pop esi;
pop ebx;
end;
Result := 0;
end
但是当应用程序调用此函数时出现分段错误。如何正确调用成员函数?