Создал базовую С++ DLL и экспортировал имена, используя файл определения модуля (MyDLL.def).
После компиляции я проверяю имена экспортируемых функций, используя dumpbin.exe
Я ожидаю увидеть:
SomeFunction
но я вижу это вместо:
SomeFunction = [email protected]@@23mangledstuff#@@@@
Почему?
Экспортированная функция выглядит неэкранированной (особенно по сравнению с не использующей файл Defence модуля), но что с другими вещами?
Если я использую dumpbin.exe
для DLL из любого коммерческого приложения, вы получите чистый:
SomeFunction
и ничего больше...
Я также попытался удалить определение модуля и экспортировать имена, используя стиль экспорта "С", а именно:
extern "C" void __declspec(dllexport) SomeFunction();
(Просто использование "extern" C "не создало экспортированную функцию)
Однако это все равно создает тот же результат, а именно:
SomeFunction = [email protected]@@23mangledstuff#@@@@
Я также попробовал параметр #define dllexport __declspec(dllexport)
и создал LIB без проблем. Однако я не хочу предоставлять LIB файл людям, использующим DLL в своем приложении С#.
Это простая ванильная С++ DLL (неуправляемый код), скомпилированный с С++ ничего, кроме простого заголовка и кода. Без модуля Def Я получаю искаженные экспортированные функции (я могу создать статическую библиотеку и использовать LIB без проблем. Я пытаюсь это избежать). Если я использую extern "C" __declspec(dllexport)
ИЛИ определение модуля, я получаю то, что кажется непривязанным именем функции... единственная проблема заключается в том, что за ним следует "=" и что выглядит как украшенная версия функции. Я хочу избавиться от материала после "=" - или, по крайней мере, понять, почему он есть.
Как бы то ни было, я вполне уверен, что могу вызвать функцию из С# с помощью P/Invoke... Я просто хочу избежать этого мусора в конце "=" .
Я открыт для предложений о том, как изменить параметры проекта/компилятора, но я просто использовал стандартный шаблон библиотеки Visual Studio - ничего особенного.