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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Драйверы / Device Drivers » Создание драйвера на C++ Builder

   
Автор / Author Тема / Topic: Создание драйвера на C++ Builder
avalex
Junior Member / Новичок
Участник № / Member № 874


Icon 5 отправлено / posted      Профиль для / Profile for avalex           Редактировать/удалить сообщение / Edit/Delete Post 
Из описания:
"DLL описания носителя (mediaN.dll) должна экспортировать функции по именам, причем имена должны быть декорированными в стиле MS Visual C++. Добиться этого можно, используя DEF файл."

Каким образом это можно сделать?

Должно быть так: ?CloseMedia@@YAHAAJ@Z
Получается так: @CloseMedia$qrl

Переопределение имени функции в DEF-файле типа
EXPORTS
?CloseMedia@@YAHAAJ@Z=@CloseMedia$qrl
не проходит, т.к. компановщик Borland не воспринимает символ '?'.

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


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
В документации допущена неточность, файл описания носителя (mediaN.dll) должен экспортировать функции не по именам, а, так же как и файлы t11 и t12, по порядковым номерам. Для создания библиотеки нужного вида не обязательно использовать DEF-файл, достаточно просто объявить функции как экспортируемые. Т.о. в проекте типа DLL в CPP-файле пишется так:
(порядок следования функций - алфавитный, в том же порядке они будут экспортированы)

//---------------------------------------------------------------------------

#include <windows.h>
#include <stdio.h>


int __export CloseMedia(long &hndl)
{
return 0;
}

int __export OpenMedia(long &hndl)
{
//FILE* fp = fopen("C:\\test_borlnd.txt", "wt");
//fprintf(fp, "Loading from Borland");
//fclose(fp);
//
hndl = 1;
//
return 0;
}

int __export ReadMedia(long &hndl, char *rbuf, int in_count, int &actual_count)
{
return 0;
}

int __export StartMedia(long &hndl)
{
return 0;
}

int __export StopMedia(long &hndl)
{
return 0;
}

int __export WriteMedia(long &hndl, char *sbuf, int out_count, int &actual_count)
{
return 0;
}

//////////////////////////////////////////////////////////////////////////////
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return TRUE;
}
//---------------------------------------------------------------------------

Сообщения / Posts 17314 | Из / From: Россия  |  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