![]() |
|
#1
|
||||||
|
||||||
![]() Приветствую!
Столкнулся с тем, что понадобилось использовать callback functions. В исходниках (заголовочные файлы) функции определены как: Код:
Код:
Гугл мне тут не помог. Благодарю заранее за помощь. UPD (нашел и сами функции): Код:
Последний раз редактировалось Sergios, 07.10.2014 в 22:15. |
#2
|
||||
|
||||
![]() Адрес Callback'а передается в функцию перечисления, и оттуда вызывается. Точное совпадение типов не обязательно (можно и DWORD'ами все заменить), но тогда будет неудобно использовать. Перевод:
BOOl - boolean; CALLBACK - насколько помню, задефайнен на модификатор stdcall; _In_ - не важен в данном случае; LPSTR - PChar; DWORD - DWORD; LONG_PTR - по-моему, он Int64. Но лучше посмотреть в хедерах/MSDN. Так что Код:
Код:
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||||||||
|
||||||||||
![]() Как ни странно, но тип BOOL в WinAPI определен как знаковое целое (int)
![]() LONG_PTR для win32 определен как long, а для win64 как __int64, что соответствует типам LongInt и Int64, соответственно. Методом научного тыка разобрался с вопросом. Покажу на примере второй функции. 1. Определяем тип-функцию. Код:
2. Описываем импортируемую функцию. Код:
3. Определяем прототип callback-функции в строгом соответствии с п.1. Код:
4. определяем реализацию функции: Код:
5. Вызов функции перечисления. Код:
In omnia paratus Последний раз редактировалось Sergios, 12.10.2014 в 15:37. |
#4
|
|||
|
|||
![]() Цитата:
При его отсутствии будет делаться дополнительная проверка типа передаваемой функции. и ещё Лучше вместо PChar явно писать PAnsiChar. Для старых версий Delphi не повредит, а в новых не будут появляться возможные ошибки |
#5
|
||||
|
||||
![]() Цитата:
Код:
![]() Цитата:
In omnia paratus |