可能重复:
如何停止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"会做到这一点.我如何摆脱破坏?谢谢.
摆脱损坏的方法:(假设MSVC是构建环境)
通过.DEF文件导出.
导出为extern"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)
| 归档时间: |
|
| 查看次数: |
6304 次 |
| 最近记录: |