Dll c++ 2005 Студия
От: zer  
Дата: 13.06.07 20:49
Оценка:
#define DllExport __declspec( dllexport )
extern "C" DllExport LRESULT CALLBACK __stdcall GetMsgProc(int code,WPARAM wParam,LPARAM lParam)

в def файле

прописано

LIBRARY TestLib

GetMsgProc @1 PRIVATE


по финалу получается в dll _GetMsgProc@12

в 2003 студии имена получались правильные GetMsgProc. че за фигня такая? мб кто-нить сталкивался
Re: Dll c++ 2005 Студия
От: Tilir Россия http://tilir.livejournal.com
Дата: 14.06.07 06:07
Оценка:
Здравствуйте, zer, Вы писали:

zer>#define DllExport __declspec( dllexport )

zer>extern "C" DllExport LRESULT CALLBACK __stdcall GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
zer>в def файле
zer>прописано
zer>LIBRARY TestLib
zer>GetMsgProc @1 PRIVATE
zer>по финалу получается в dll _GetMsgProc@12
zer>в 2003 студии имена получались правильные GetMsgProc. че за фигня такая? мб кто-нить сталкивался

Всё очень просто: в def-файле забыта директива EXPORTS, при наличии которой (и вообще при наличии def-файла) объявление declspec просто не нужно. Напишите примерно вот так:

// SimpleDLL.def
LIBRARY    "SimpleDLL"
EXPORTS testfunc @1 PRIVATE


// SimpleDLL.cpp
extern "C"{
  int __stdcall testfunc(int x){
    return x;
  }
}


И будут правильные имена.
Re[2]: Dll c++ 2005 Студия
От: zer  
Дата: 14.06.07 09:48
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Здравствуйте, zer, Вы писали:


zer>>#define DllExport __declspec( dllexport )

zer>>extern "C" DllExport LRESULT CALLBACK __stdcall GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
zer>>в def файле
zer>>прописано
zer>>LIBRARY TestLib
zer>>GetMsgProc @1 PRIVATE
zer>>по финалу получается в dll _GetMsgProc@12
zer>>в 2003 студии имена получались правильные GetMsgProc. че за фигня такая? мб кто-нить сталкивался

T>Всё очень просто: в def-файле забыта директива EXPORTS, при наличии которой (и вообще при наличии def-файла) объявление declspec просто не нужно. Напишите примерно вот так:


T>
T>// SimpleDLL.def
T>LIBRARY    "SimpleDLL"
T>EXPORTS testfunc @1 PRIVATE
T>


T>
T>// SimpleDLL.cpp
T>extern "C"{
T>  int __stdcall testfunc(int x){
T>    return x;
T>  }
T>}
T>


T>И будут правильные имена.


спасибо большое . помогло.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.