创建了基本的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模板-没什么特别的。
- 3 回答
- 0 关注
- 353 浏览
添加回答
举报
0/150
提交
取消