Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Общие вопросы / Common questions » T13.DLL

   
Автор / Author Тема / Topic: T13.DLL
AndreyV
Junior Member / Новичок
Участник № / Member № 1542


Icon 1 отправлено / posted      Профиль для / Profile for AndreyV           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте,
Пытаюсь подцепить DLL'ку вида T13.dll, вроде, все как написано (стр. 532) делаю, ничего не работает. Ни в случае канала "I" - канал не принимает данные, ни в случае "O" - dll не создает файл.
DLL создаю в С++ Builder 6.0, пробовал разные модификаторы (extern, extern "C", __cdecl и т.п.)
1) какими средствами можно подсмотреть, пытается TM вызвать функцию из DLL или нет?
2) МОжет есть пример вызова DLL-ки, написанной на Builder'е?

Сообщения / Posts 22 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
У нас в документации сказано, что мы рекомендуем именно VS C++ от Microsoft, потому как разные компиляторы по-разному могут собирать dll-файлы.
В частности в справке в этом же разделе сказано, что:
quote:

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


Сообщения / Posts 17322 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AndreyV
Junior Member / Новичок
Участник № / Member № 1542


Icon 1 отправлено / posted      Профиль для / Profile for AndreyV           Редактировать/удалить сообщение / Edit/Delete Post 
И в алфавитном порядке расположил, и кучу модификаторов перепробовал:
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'ки?

Сообщения / Posts 22 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AndreyV
Junior Member / Новичок
Участник № / Member № 1542


Icon 1 отправлено / posted      Профиль для / Profile for AndreyV           Редактировать/удалить сообщение / Edit/Delete Post 
Подготовил 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'ку?

Сообщения / Posts 22 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
А в РБК это работать и не будет! Он только для эмуляции работы математики и каналов, в нем не работают внешние обращения. Проверку необходимо делать либо в РПД, либо в Профайлере.
Сообщения / Posts 17322 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AndreyV
Junior Member / Новичок
Участник № / Member № 1542


Icon 1 отправлено / posted      Профиль для / Profile for AndreyV           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо, DLL успешно "подцепилась" TM работает. С'шный код пришлось компилировать в Microsoft VC, в Builder'е решить проблему с декорированием имен функций так и не удалось.
Сообщения / Posts 22 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2