Помогите, я окончательно запутался. Опыт работы в Delphi небольшой...
Использую DLL от китайского оборудования, необходимо подписаться на события, которые он генерирует.
В .H файле функция описана так
Код:
typedef void (* DECODE_NOTIFY_CALLBACK)(void *buf, DWORD DataLen);
FSC_API int __stdcall EnableDecodeNotify(HCONNECT hConnect, HANDLE hWnd, DWORD Option, void *Buffer, DWORD BufferSize, DECODE_NOTIFY_CALLBACK callback);
Пишу на Delphi, даже не компилируется
Код:
type
TDecodeNotify = procedure(Buffer:PChar;Size:integer); stdcall;
......
TMyClass = class(TV8UserObject)
private
procedure DecodeNotify(Buffer: PChar; Size:integer); stdcall;
......
// Реализация события
procedure TMyClass.DecodeNotify(Buffer: PChar; Size:integer);
var
Module, Event, Data: PWideChar;
ResStr: ansistring;
begin
Module := PWideChar('Hardware');
Event := PWideChar('Scan');
if Size>0 then SetString(ResStr, Buffer, Size)
else ResStr := '';
Data := PWideChar(ResStr);
V8.ExternalEvent(Module, Event, Data);
end;
......
// Нерабочая попытка подписаться на события
function TMyClass.SearchCOMA(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
var
ScanerID: integer;
FunctionDLL:TSearchCOMW;
FunctionDLL2:TEnableDecodeNotify;
begin
........
ScanerID:= FunctionDLL(ComPort); { используем ф-ию }
if ScanerID <> -1 then begin
@FunctionDLL2 := GetProcAddress(HandleDLL, '_EnableDecodeNotify@24');
Assert(@FunctionDLL2 <> nil);
FunctionDLL2(ScanerID,0,0,Addr(Buffer),SizeOf(Buffer),DecodeNotify); // <= Тут ошибка
// [dcc32 Error] cino1.pas(159): E2009 Incompatible types: 'regular procedure and method pointer'
end;
end;
Что я делаю не так ??? Как правильно подписаться на событие DLL ?