Добрый день всем! Я тут уже мозг себе сломал с такой проблемой: экспортирую простую функцию из DLL. Пишу так: Код (Text): extern "C" __declspec(dllexport) int __stdcall func(int param) { /* код */ } В таблице экспорта получаю _func@4. Пробовал убрать __stdcall, получаю func. А я хочу, чтобы функция была stdcall, неужто надо def-файл писать? И вообще, какого, спрашивается, Visual C++ искажает имя функции при живом extern "C"?
SoftCreator Можно и без него: Код (Text): #pragma comment(linker, "/export:func=_func@4") extern "C" int __stdcall func(int param) { /* код */ }
У автора OllyDbg в plugin.h можно прочитать такие строки Код (Text): // Borland adds underscore to export automatically, whereas I don't know any // such option for Microsoft compiler. This solution is not too elegant but // works. #define ODBG_Plugindata _ODBG_Plugindata #define ODBG_Plugininit _ODBG_Plugininit #define ODBG_Pluginmainloop _ODBG_Pluginmainloop .....
Без него VC++ декорировал бы имя ещё круче (если исходник компилируется как C++). #pragma comment(linker, "/export:…") добавляет синоним экспортируемого имени. Самое забавное что если добавить опцию /export:func в дополнительные для линкера, всё выходит красиво, даже без __declspec(dllexport)/extern "C". Такие вот пироги.
Заработало! Код (Text): #pragma comment(linker, "/export:func=_func@4") extern "C" int __stdcall func(int param) { /* код */ } Спасибо за советы!