Экспорт DLL __declspec (dllexport) не работает - PullRequest
1 голос
/ 30 марта 2012

Я пытался использовать __declspec (dllexport) для экспорта функций в мою DLL, но это не работает.Когда я запускаю GetProcAddress в основном приложении, он всегда показывает «Указанный модуль не найден».

Но если я экспортирую свои функции в файл .defЭто работает очень хорошо.

Можете ли вы помочь мне решить эту проблему.Я хочу использовать __declspec (dllexport) вместо файла .def.

Большое спасибо.(Я использую Visual C ++ 2005, MFC)

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Указанный модуль не найден

Это неправильное сообщение об ошибке, вы получите его только при сбое LoadLibrary. Обычно потому, что вы используете неправильное имя файла. GetProcAddress () завершается с ошибкой 127 «Указанная процедура не найдена».

Предполагая, что это на самом деле имя экспортируемой функции, у вас мало вариантов переименования функции с помощью __declspec (dllexport). У вас есть только extern "C" для подавления искажения имени в C ++. Экспортируемое имя все еще будет иметь подчеркивание перед своим именем, @n после его имени, если оно было объявлено __stdcall. Экспорт полностью без отделки возможен только в 64-битном коде или с использованием файла .def.

Используйте dumpbin.exe / exports в DLL, чтобы увидеть реальные имена. Вы получите лучший дамп, если сначала удалите файл .pdb. Depends.exe тоже подойдет.

0 голосов
/ 30 марта 2012

Я предполагаю, что вы не ищете правильное имя при использовании GetProcAddress. Вы использовали dumpbin или Dependency Walker для проверки названия экспортируемой функции?

...