Чтобы импортировать 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 я получаю ошибку нарушения доступа.Где я не прав?