Delphi で記述された DLL をロードする C++ で記述されたアプリケーションがあります。アプリケーションは、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
しかし、アプリケーションがこの関数を呼び出すと、セグメンテーション違反が発生します。メンバー関数を正しく呼び出すにはどうすればよいですか?