Delphi Access Violation вызывает C ++ DLL, которая реализует интерфейс - PullRequest
0 голосов
/ 14 мая 2018

Чтобы импортировать DLL в Delphi, я написал модуль, переводящий .h файл. Эта DLL позволяет мне определять процедуру для мониторинга двух значений и использовать их в моем приложении.

оригинальный файл .hэто:

class MyINTERFACE
{
   public:
   virtual void MonitorProc(int value1, int value2) = 0;
};

extern MY_API MyHANDLE* Init();
extern MY_API UINT InitMonitorProc(MyHANDLE * handle, MyINTERFACE * pMyProc);

и это мой перевод:

unit myCdllUnit;

interface

const

 TMyHANDLE = DWORD;  

 MyINTERFACE = class
 public
   procedure MonitorProc(value1: longint;  value2: longint); virtual; cdecl; abstract;
 end;

function Init(): TMyHANDLE; cdecl; external 'myCdll.dll'; 
function InitMonitorProc(handle: TMyHANDLE; pMyProc: MyINTERFACE):DWORD; cdecl; external 'myCdll.dll';

implementation

end.

в основной форме я переопределяю MonitorProc (изначально только с «унаследованным» для проверки вызова)

TMyMonitor = class(MyINTERFACE)
public
procedure MonitorProc(value1: longint; value2: longint); override;
end;

procedure TMyMonitor.MonitorProc(value1: longint;  value2: longint);
begin
  inherited;
end;   <--------------------------- here get an Access Violation

и в моем FormCreate я передаю istance в InitMonitorProc

MyMonitor := TMyMonitor.Create;
InitMonitorProc(Handle, MyMonitor);

, DLL вызывает правильно, но при выходе из MonitorProc я получаю ошибку нарушения доступа.Где я не прав?

...