|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как правильно перейти с 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
|
|||
|
|||
В гугле опять забанили?
http://docwiki.embarcadero.com/RADSt...C%2B%2BBuilder Т.е. в твоем случае: Код:
extern "C" __declspec(dllexport) void CloseDriver(void); void __stdcall CloseDriver(void) { ... } |
#3
|
|||
|
|||
нет, в хугли не забанили, просто С++ не моя тема, понемногу в ДЕЛФИ программирую. На этот раз нужно ДЛЛ разобрать на запчасти, а оно на С++ для чего то написали.
За подсказку спасибо. НО..... вот это extern "C" __declspec(dllexport) void CloseDriver(void); это надо для каждой функции прописать в начале файла после всех инклюдов? в досфикиамбаркодеро (по ссылке) все таки не совсем понятно... |
#4
|
|||
|
|||
Если правильно помню (лень второй, точнее уже третий - сообщения пропадают, какой-то глюк с форумом - раз искать), то __declspec можно указвать прямо при декларации функции.
|