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

Разработка программ на пес его знает на чем
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Игорь Смирнов
Новичок
Сообщения: 12
Зарегистрирован: 06 Июль 2005, 13:10
Откуда: Москва
Контактная информация:

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

Сообщение Игорь Смирнов »

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

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Сообщение Admin »

Может быть передать туда адрес твой процедуры?

Игорь Смирнов
Новичок
Сообщения: 12
Зарегистрирован: 06 Июль 2005, 13:10
Откуда: Москва
Контактная информация:

Сообщение Игорь Смирнов »

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

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Сообщение Admin »

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

Игорь Смирнов
Новичок
Сообщения: 12
Зарегистрирован: 06 Июль 2005, 13:10
Откуда: Москва
Контактная информация:

Сообщение Игорь Смирнов »

Да вроде правильно.
Вот так она у меня описана:

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

Device_Init(LONG),LONG,PASCAL,RAW
WBR, Игорь Смирнов

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Сообщение Admin »

А точно Pascal? Может быть как CPP

Гость

Сообщение Гость »

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

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Сообщение Admin »

В файлике имяexe.MAP по моему есть все адреса ...

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Delphi & Clarion

Сообщение Admin »

Вот на скорую руку накрапал проектик.
Мульти DLL приложение на Кларионе.
Вызывается дельфийская функция которой передается адрес Кларион функции. Соответственно все везде передается и все работает.

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

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

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

Аватара пользователя
Admin
Администратор
Сообщения: 3536
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Сообщение Admin »


Ответить