This is topic T13.DLL in forum Общие вопросы / Common questions at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/26/t/000232.html

Posted by AndreyV (Участник № / Member № 1542) on :
 
Здравствуйте,
Пытаюсь подцепить DLL'ку вида T13.dll, вроде, все как написано (стр. 532) делаю, ничего не работает. Ни в случае канала "I" - канал не принимает данные, ни в случае "O" - dll не создает файл.
DLL создаю в С++ Builder 6.0, пробовал разные модификаторы (extern, extern "C", __cdecl и т.п.)
1) какими средствами можно подсмотреть, пытается TM вызвать функцию из DLL или нет?
2) МОжет есть пример вызова DLL-ки, написанной на Builder'е?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
У нас в документации сказано, что мы рекомендуем именно VS C++ от Microsoft, потому как разные компиляторы по-разному могут собирать dll-файлы.
В частности в справке в этом же разделе сказано, что:
quote:

Компилятор Borland C++ Builder 6.0 неправильно обрабатывает DEF-файлы. Добиться присвоения нужных ordinals удается, только расположив определения функций в алфавитном порядке в исходном файле.


 
Posted by AndreyV (Участник № / Member № 1542) on :
 
И в алфавитном порядке расположил, и кучу модификаторов перепробовал:
extern "C" __declspec(dllexport) int t13_fread(char *name,IA &ia, float &v);
extern __declspec(dllexport) int t13_fread(char *name,IA &ia, float &v);

У меня генерятся имена экспортируемых функций вида:
GLOBAL _t13_fread:PROC
GLOBAL @t13_fread$qpcr2IArf:PROC

А надо, как я понял вот так:
GLOBAL ?OpenMedia@@YAHAAJ@Z:PROC

Правильно? Если'б быть уверенным, что дело только в этом, наверное можно "добить" Билдеровское декорирование имен.

Поэтому есть большое желание где-то увидеть отражение попытки TM вызвать функцию из DLL'ки.
Может в логе, может канал какой-то тестовый завести надо...
Вы можете посоветовать, как убедиться в том, что TM действительно пытается вызвать функцию из DLL'ки?
 
Posted by AndreyV (Участник № / Member № 1542) on :
 
Подготовил DLL в MS Visual C++, получил Microsoft'овские имена экспортируемых функций:

GLOBAL ?t13_close@@YAXXZ:PROC
GLOBAL ?t13_fread@@YAHPADAATIA@@AAM@Z:PROC
GLOBAL ?t13_fwrite@@YAHPADAATIA@@M@Z:PROC
GLOBAL ?t13_open@@YAXXZ:PROC
GLOBAL ?t13_read@@YAHPADAATIA@@AAM@Z:PROC
GLOBAL ?t13_start@@YAXXZ:PROC
GLOBAL ?t13_stop@@YAXXZ:PROC
GLOBAL ?t13_write@@YAHPADAATIA@@M@Z:PROC

Работу DLL - не вижу. Канал ПУСТОЙ, fast_R/W IO=1,
значение канала=1, пробую для типа I (input), затем меняю на O (output) и снова запускаю редактор базы каналов в режиме эмуляции.

Где я могу увидеть попытку TM вызвать DLL'ку?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
А в РБК это работать и не будет! Он только для эмуляции работы математики и каналов, в нем не работают внешние обращения. Проверку необходимо делать либо в РПД, либо в Профайлере.
 
Posted by AndreyV (Участник № / Member № 1542) on :
 
Спасибо, DLL успешно "подцепилась" TM работает. С'шный код пришлось компилировать в Microsoft VC, в Builder'е решить проблему с декорированием имен функций так и не удалось.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2