Страница 1 из 1

"Чужая" DLL должна вызывать Кларионовскую процедур

Добавлено: 15 Октябрь 2005, 13:52
Игорь Смирнов
Ситуация такая: я в своей программе использую функции "чужой" DLL (написана на TASM'е, но это не важно).
Все идет нормально, функции задекларированы, значения возвращаются и т.д.
Но... В этой DLL есть одна интересная функция. Привожу ее описание в том виде, в котором его дал автор этой DLL:
Device_Init(StatusProc);
Инициализация библиотеки, запуск монитора статуса устройства.
StatusProc - указатель на процедуру, которая будет вызвана при обнаружении/потере устройства, или 0, если вызов процедуры не требуется.
Возващает 0 - если инициализация прошла успешно или -1 в обратном случае.
Процедура StatusProc вызывается библиотекой с одним параметром:
1 - если устройство найдено, или 0 - если потеряно.
Проблема моя в том, что мне позарез нужно вызывать эту функцию именно в том варианте, который должен запускать процедуру в моей программе. И процедура такая у меня есть - подготовлена, так сказать, к реализации.
Но я не знаю, как узнать этот "указатель на процедуру", который нужно передать DLL'ке.

Добавлено: 16 Октябрь 2005, 5:11
Admin
Может быть передать туда адрес твой процедуры?

Добавлено: 16 Октябрь 2005, 17:16
Игорь Смирнов
Admin писал(а):Может быть передать туда адрес твой процедуры?
Пытался - в результате GPF.

Добавлено: 16 Октябрь 2005, 17:33
Admin
Слушай. Я думаю ты неправильно описал свою процедуру...
Ей наверное нужно сказать в атрибутах Pascal или еще что нибудь такое. Может народ подскажет что.
Хотя это по идее должно влиять на передачу параметров а не на вызов просто процедуры.
А она точно без параметров?

Добавлено: 16 Октябрь 2005, 23:33
Игорь Смирнов
Да вроде правильно.
Вот так она у меня описана:

Код: Выделить всё

Device_Init(LONG),LONG,PASCAL,RAW

Добавлено: 17 Октябрь 2005, 6:23
Admin
А точно Pascal? Может быть как CPP

Добавлено: 17 Октябрь 2005, 11:37
Гость
Admin писал(а):А точно Pascal? Может быть как CPP
Дык... В этой ДЛЛ еще куча других функций. И все они у меня описаны как Паскаль, и все это дело работает.
Думаю, что надо вопрос по-другому поставить - как вызвать Кларионовскую процедуру не по имени, а по адресу.

Добавлено: 17 Октябрь 2005, 12:10
Admin
В файлике имяexe.MAP по моему есть все адреса ...

Delphi & Clarion

Добавлено: 21 Октябрь 2005, 4:10
Admin
Вот на скорую руку накрапал проектик.
Мульти DLL приложение на Кларионе.
Вызывается дельфийская функция которой передается адрес Кларион функции. Соответственно все везде передается и все работает.

Получается:
Clarion->Delphi->Clarion

Что долго объяснять смотрите сами...

P.S. Clarion 6.2 [9047] & Delphi 7

Добавлено: 21 Октябрь 2005, 12:59
Admin