У меня есть приложение, написанное на C ++, которое загружает мою DLL, написанную на Delphi.Приложение вызывает экспортированную функцию DLL и передает ей указатель на объект класса, который имеет несколько функций-членов, которые я хочу вызывать из моей Delphi DLL.Я написал Delphi класс, эквивалентный классу C ++:
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;
};
Функции-члены используют соглашение о вызовах thiscall, которое не имеетDelphi эквивалент.Это, вероятно, означает, что мне нужно использовать сборку.Я попытался:
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
Но я получаю ошибку сегментации, когда приложение вызывает эту функцию.Как правильно вызвать функцию-член?