Unmangling C++ DLL函数名称

Jim*_*ell 7 c++ dll

可能重复:
如何停止DLL导出函数的名称修改?

我有一个用C++编写的DLL.导出的函数名称需要解除标记.例如,int MyFunc( int Param1, int Param2 );需要向外部应用程序显示尝试简单地调用库函数MyFunc.但是,当我使用Dependency Walker查看它时,它看起来像_MyFunc@8.这就是我在C++中声明的方式:

extern "C" __declspec(dllexport) int WINAPI MyFunc( int Param1, int Param2 );
Run Code Online (Sandbox Code Playgroud)

我以为extern "C"会做到这一点.我如何摆脱破坏?谢谢.

Chr*_*cke 8

摆脱损坏的方法:(假设MSVC是构建环境)

通过.DEF文件导出.

导出为ex​​tern"C",确保使用__cdecl调用约定.即使使用extern"C",__ stdcall也会在_之后添加@并在@dll导出函数上发布@.

extern "C" __declspec(dllexport) int __cdecl MyFunc(int Param1, int Param2);
Run Code Online (Sandbox Code Playgroud)

使用#pragma指令导出.您需要在此另一侧传递完全受损的名称.__FUNCDNAME__是一个有用的指令,在函数中放入一个宏来列出它的装饰名称,

#pragma comment(linker, "/EXPORT:MyFunc=_MyFunc@8");
Run Code Online (Sandbox Code Playgroud)