|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите подписаться на события DLL...
Помогите, я окончательно запутался. Опыт работы в 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 ? |
#2
|
||||
|
||||
Не все типы объявлены даже. И нет импорта функции.
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Нельзя метод класса передать в качестве callback.
Код:
... // [dcc32 Error] cino1.pas(159): E2009 Incompatible types: 'regular procedure and method pointer' ... Цитата:
Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |