Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2018, 13:43   #1
Gawwws
Пользователь
 
Регистрация: 18.10.2008
Сообщений: 65
По умолчанию Обратный вызов из DLL (CALLBACK) - Delphi

В справке описано, что CALLBACK ф-я должна иметь такой вид:

Код:
typedef struct
{
UINT16 Year;
UINT16 Month;
UINT16 Day;
UINT16 Hour;
UINT16 Min;
UINT16 Sec;
UINT16 MSec;
} DATETIME;
typedef UINT8 __stdcall ExchangeMonitorCallBack(UINT8 DllType, WCHAR* DllName, UINT32 DllNameLength, UINT8 Action, DATETIME DT, VOID* Package, UINT32 Pack-ageSize);
Перевёл в DELPHI и написал:

Код:
type TTimeDate  = record
  Year: word;
  Month: word;
  Day: word;
  Hour: word;
  Min: word;
  Sec: word;
  MSec: word;
end;
function ExchangeMonitorCallBack(DllType: byte; DllName: Array of WideChar; DllNameLength: integer; Action: byte; DT: TTimeDate; Package: Pointer; PackageSize: integer): byte;
В библиотеке есть ещё одна функция, которая должна установить адрес:

Код:
INT32 SetExchangeMonitorCallBack(VOID* pExchangeMonitorCallBack);
pExchangeMonitorCallBack – указатель на функцию обратного вызова ExchangeMonitorCallBack.
Как её описать? Типа так?

Код:
Function SetExchangeMonitorCallBack(pExchangeMonitorCallBack: Pointer): integer; cdecl; external 'DrtRS232.dll';
Не получается, да и где нужно указывать что это именно stdcall?
Gawwws вне форума Ответить с цитированием
Старый 19.01.2018, 16:37   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Перевёл в DELPHI и написал:
WCHAR* не есть array of ... а будет это PWideChar
DATETIME сомневаюсь в TDateTime (по крайней мере могут РАЗНЫЕ отсчеты) "нулевой" год и день
type TdateTime =record существующие имена широко известных типов лучше не использовать
почему? смотри пример строкой(двумя) выше. Очень сильно вводит в заблуждение.

__stdcall значит и наша функция должна быть такая же
function ExchangeMonitorCallBac...; stdcall;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.01.2018 в 16:42.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с DLL c# (Вызов Формы из DLL) updaite C# (си шарп) 16 24.10.2013 05:48
Вызов функций из DLL написанной на Delphi Boris777 Общие вопросы C/C++ 2 20.12.2011 10:53
Многопоточность, обратный вызов BOBAH13 Свободное общение 0 11.12.2011 03:24
вызов callback Vistar Общие вопросы .NET 9 24.10.2010 14:49
Callback из dll - как? flug Общие вопросы Delphi 2 30.09.2010 13:13