|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Не работает Callback из DLL. Получитал форум и запутался окончательно
Использую чужую DLL написанная на С
Описание функции: Код:
int __stdcall EnableDecodeNotify (HCONNECT hConnect, HANDLE hWnd, DWORD Option, void *Buffer, DWORD BufferSize, DECODE_NOTIFY_CALLBACK callback); Пишу в Delphi так Код:
TDecodeNotify = procedure(Buffer:PAnsiChar;Size:longword) of object; stdcall; TMyClass = class(TV8UserObject) private Buffer: array[0..1023] of char; procedure MyDecodeNotify(Buffer: PAnsiChar; Size:longword); stdcall; ..... end; implementation function FSC_EnableDecodeNotify (hConnect: integer; hWnd: THandle;Option: longword; Buffer: Pointer; BufferSize: longword; callback: TDecodeNotify): integer; stdcall; external 'FSC.DLL' name '_EnableDecodeNotify'; Инциализирую так: Код:
DebugInt:=FSC_EnableDecodeNotify(hConnect, 0, Option, @Buffer, SizeOf(Buffer), MyDecodeNotify); И не работает - Callback не вызывается. Что я делаю не так? Последний раз редактировалось Admin, 16.10.2017 в 22:39. |
#2
|
|||
|
|||
Подозреваю такие варианты:
1. Неправильно перевел синтаксис процедуры из С 2. Неправильно передаю адрес процедуры Callback 3. Нельзя использовать Callback-процедуру в объекте 4. Для вызова Callback нужны дополнительные действия. Есть пример на С и VB в котором Callback работает |
#3
|
||||
|
||||
Что сразу бросилось:
TDecodeNotify не нужно по большому счету, callback объявить как указатель. MyDecodeNotify не нужно делать методом класса. При вызове передавать @MyDecodeNotify. Пишу программы за еду. __________________ |