从C++DLL中获取损坏的函数名称

Get functions mangled name from C++ DLL

本文关键字:函数 损坏 C++DLL 获取      更新时间:2023-10-16

我有一个声明为__declspec(dllexport) void TakeInput(); 的函数

有这个函数的DLL是在C#中导出的。我在执行对这个函数的函数调用时失败,因为在C#代码中找不到入口点。

谷歌搜索显示问题在于并没有提供正确的入口点。我需要为这个函数提供损坏的名称。

所以我想知道怎样才能得到这个函数的名字?

为了避免名称篡改,请使用extern "C"

extern "C" __declspec(dllexport) void TakeInput();

更多阅读:使用extern指定链接

您可以使用DependencyWalker(http://www.dependencywalker.com)或者其他一些列出DLL导出的工具,如果你真的想得到损坏的名称,但你最好按照Armen的建议去做。

与其尝试计算损坏的名称,我建议只导出未损坏的名称。要做到这一点,你需要做两件事:

  1. 使用C链接为您的函数禁用C++名称篡改您可以使用extern "C"来执行此操作。

  2. 请确保您的函数使用C调用约定。这是默认设置(至少在Microsoft Visual Studio中是这样(,但可以使用/Gr(切换__fastcall调用约定(和/Gz(切换__stdcall调用约定(命令行开关更改此默认设置。您可以使用__cdecl强制执行C调用约定,如下所示:

总之,为了确保您的函数导出为TakeInput,请使用:

extern "C" __declspec(dllexport) void __cdecl TakeInput();