Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > C/C++ > C++ Builder
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.05.2016, 18:05
Pcrepair Pcrepair вне форума
Прохожий
 
Регистрация: 20.01.2015
Сообщения: 32
Версия Delphi: Pascal
Репутация: 10
По умолчанию Как правильно перейти с Borland C++ 3 на Emb C++Builder XE3?

Добрый день! есть, к примеру, функция (из состава DLL)

Код:
void _export __stdcall CloseDriver(void)
{
   if (!FActiveHW) return;
   if (FRunningWinNT)
   {
      if (!DriverStop()) return;
      if (!DriverRemove()) return;
      DisconnectSCM();
   }

   if (FreeLibrary(FDLLInst)==0) return;
   FDLLInst=NULL;

   FActiveHW=false;
}

При сборке DLL (в Emb C++Builder XE3) RAD выдает сообщение : Function defined with different linkage. При этом собранная DLL "не работает" - программа ее "не читает", в отличие от DLL-ки из источника (откуда и сам код). Изначально (1999 год) все делалось в Borland C++ 3, прошло много лет и сменилось много поколений RAD, вероятно в этом причина?

Вопрос : что нужно сделать, чтобы пересобрать старый код в новой RAD, так чтобы все работало?
Ответить с цитированием
  #2  
Старый 07.05.2016, 23:21
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,928
Репутация: 49086
По умолчанию

В гугле опять забанили?
http://docwiki.embarcadero.com/RADSt...C%2B%2BBuilder

Т.е. в твоем случае:
Код:
extern "C" __declspec(dllexport) void CloseDriver(void);

void __stdcall CloseDriver(void)
{
...
}
Ответить с цитированием
  #3  
Старый 08.05.2016, 16:24
Pcrepair Pcrepair вне форума
Прохожий
 
Регистрация: 20.01.2015
Сообщения: 32
Версия Delphi: Pascal
Репутация: 10
По умолчанию

нет, в хугли не забанили, просто С++ не моя тема, понемногу в ДЕЛФИ программирую. На этот раз нужно ДЛЛ разобрать на запчасти, а оно на С++ для чего то написали.
За подсказку спасибо. НО..... вот это
extern "C" __declspec(dllexport) void CloseDriver(void);
это надо для каждой функции прописать в начале файла после
всех инклюдов? в досфикиамбаркодеро (по ссылке) все таки не совсем понятно...
Ответить с цитированием
  #4  
Старый 12.05.2016, 05:43
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,928
Репутация: 49086
По умолчанию

Если правильно помню (лень второй, точнее уже третий - сообщения пропадают, какой-то глюк с форумом - раз искать), то __declspec можно указвать прямо при декларации функции.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter