VC ++ запрещает все украшения имен символов - PullRequest
8 голосов
/ 11 июля 2011

Я работаю над библиотекой DLL, которая будет использоваться на другом языке (поэтому нет импортных библиотек и включая заголовки dll), используя конвенцию вызова _stdcall. Проблема в том, что VC ++, кажется, всегда делает некоторые украшения имени для своих экспортируемых символов. Все ссылки, которые я когда-либо видел, говорят, что используют extern "C", но, похоже, это все еще оставляет мне подчеркивание в начале и знак "@" после экспортированного имени.

Хуже всего то, что автоматизированное средство загрузки расширений dll на целевом языке, по сути, выполняет "func_name = GetProcAddress (dll," func_name ")", поэтому при использовании недекорированного имени GetProcAddress происходит сбой, а при использовании декорированного имени он жалуется на недопустимое имя переменной (@ не допускается): (

Как я могу сделать так, чтобы VC ++ экспортировал что-то без именных украшений?

extern "C" __declspec(dllexport) int __stdcall test(int x, const char *str);

dumpbin.exe

00011366 _test @ 8 = @ ILT + 865 (_test @ 8)

1 Ответ

6 голосов
/ 11 июля 2011

Вы можете использовать файл .def. Это позволит вам экспортировать функции без украшений.

Чтение: Экспорт из DLL с использованием файлов DEF

...