Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 22.05.2017
Сообщений: 15
1

Обратный вызов из DLL (CALLBACK)

19.01.2018, 10:55. Показов 2271. Ответов 2
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
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 и написал:

Delphi
1
2
3
4
5
6
7
8
9
10
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;
В библиотеке есть ещё одна функция, которая должна установить адрес:

C++
1
INT32 SetExchangeMonitorCallBack(VOID* pExchangeMonitorCallBack);
pExchangeMonitorCallBack – указатель на функцию обратного вызова ExchangeMonitorCallBack.

Как её описать? Типа так?

Delphi
1
Function SetExchangeMonitorCallBack(pExchangeMonitorCallBack: Pointer): integer; cdecl; external 'DrtRS232.dll';
Не получается, да и где нужно указывать что это именно stdcall?

Добавлено через 20 часов 49 минут
Неужели не у кого нет соображений на данную тему? Может я не понятно вопрос задал? Так напишите что именно не понятно. Я ранее не применял данные функции и в нете ответа не нашёл, очень надеюсь на Вашу помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2018, 10:55
Ответы с готовыми решениями:

Вызов процедуры из dll
Здравствуйте опытные программисты у меня к вам такой вопрос я написал dll с парочкой процедур...

Вызов функциий из DLL
Есть дллка, написанная на си++. В ней экспортируется класс. Как использовать этот класс в делфи? ...

Вызов функции из DLL
Подскажите: вот мне нужно вызвать функцию из dll, название функции я узнал, но я не знаю с камими...

Вызов функции из Dll
Суть проблемы. Пишу программу подобие работы с БД. Написал функцию добавления в базу данных type ...

2
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
20.01.2018, 06:25 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//...
type 
TTimeDate  = packed record
  Year: word;
  Month: word;
  Day: word;
  Hour: word;
  Min: word;
  Sec: word;
  MSec: word;
end;
function ExchangeMonitorCallBack(DllType: byte; DllName: PWideChar; DllNameLength: Longint; Action: byte; DT: TTimeDate; Package: Pointer; PackageSize: Longint): byte; stdcall;
//...
implementation
//...
function ExchangeMonitorCallBack(DllType: byte; DllName: PWideChar; DllNameLength: Longint; Action: byte; DT: TTimeDate; Package: Pointer; PackageSize: Longint): byte; stdcall; external 'DrtRS232.dll';
//...
Добавлено через 9 минут
Delphi
1
2
3
4
5
6
7
8
9
//...
type
TExchangeMonitorCallBack = function (DllType: byte; DllName: PWideChar; DllNameLength: Longint; Action: byte; DT: TTimeDate; Package: Pointer; PackageSize: Longint): byte; stdcall;
function SetExchangeMonitorCallBack(pExchangeMonitorCallBack: TExchangeMonitorCallBack): Longint; stdcall;
//...
implementation
//...
function SetExchangeMonitorCallBack(pExchangeMonitorCallBack: TExchangeMonitorCallBack): Longint; stdcall;  external 'DrtRS232.dll';
//...
Добавлено через 18 секунд
Попробуйте так
0
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 515
20.01.2018, 08:03 3
Во первых:
Цитата Сообщение от novtoxa Посмотреть сообщение
INT32 SetExchangeMonitorCallBack(VOID* pExchangeMonitorCallBack);
Delphi
1
function SetExchangeMonitorCallBack(pExchangeMonitorCallBack: Pointer): Integer; stdcall;
Во вторых, по функции не видно что она экспортируемая.
На "плюсах" она должна иметь следующий вид:
C++
1
INT32 __stdcall SetExchangeMonitorCallBack(VOID* pExchangeMonitorCallBack);
0
20.01.2018, 08:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2018, 08:03
Помогаю со студенческими работами здесь

вызов функции в DLL
Приветствую. Что то никак не могу понять. в ДЛЛ ставлю глобальный хук на нажатие клавиши мыши. при...

вызов dll написанной на с++
Всем доброго дня!!! Ребята помогите пожалуйста не могу получить результат в Delphi из вызываемой...

вызов функции из Dll
DLL: library mod_screen; uses ...

CallBack -Обратный вызов
Не могу вкурить обратные вызовы в Java. По Вики - это передача исполняемого кода в качестве одного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru