创建了基本的C ++ DLL,并使用模块定义文件(MyDLL.def)导出了名称。编译后,我使用以下命令检查导出的函数名称dumpbin.exe :
SomeFunction
但是我看到的是:
SomeFunction = SomeFunction@@@23mangledstuff#@@@@
为什么?
导出的函数看起来没有修饰(尤其是与不使用Module Def文件相比),但是其他内容又如何呢?
如果我使用dumpbin.exe任何商业应用程序中的DLL进行清洁,那么您都可以:
SomeFunction
没什么...
我还尝试了删除模块定义,并使用“ C”导出样式导出名称,即:
extern "C" void __declspec(dllexport) SomeFunction();
(仅使用“ extern“ C”不会创建导出函数)
但是,这仍会创建相同的输出,即:
SomeFunction = SomeFunction@@@23mangledstuff#@@@@
我还尝试了该#define dllexport __declspec(dllexport)选项,并毫无问题地创建了LIB。但是,我不想为使用C#应用程序中的DLL的用户提供LIB文件。
它是普通的C ++ DLL(非托管代码),仅使用简单的标头和代码即可使用C ++进行编译。没有Module Def,我将无法处理导出的函数(我可以创建一个静态库并使用LIB没问题。我试图避免这种情况)。如果使用extern "C" __declspec(dllexport) OR或 Module Definition,我得到的似乎是未修饰的函数名称...唯一的问题是它后面跟有一个“ =”,并且看起来像该函数的修饰版本。我想摆脱“ =”之后的内容-或至少了解其中的原因。
就目前而言,我非常确定我可以使用P / Invoke从C#调用该函数...我只是想避免在“ =”末尾出现垃圾。
我愿意就如何更改项目/编译器设置提出建议,但我只是使用了标准的Visual Studio DLL模板-没什么特别的。
有只小跳蛙
手掌心
相关分类