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

时间:2011-07-01 11:36:30

标签: c++ dllexport

我将函数声明为__declspec(dllexport) void TakeInput();

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

谷歌搜索显示问题是没有提供正确的入口点。我需要为此函数提供受损名称。

所以我想知道如何获得这个函数的错误名称?

3 个答案:

答案 0 :(得分:4)

为避免名称损坏,请使用extern "C"

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

更多阅读:Using extern to specify linkage

答案 1 :(得分:0)

你可以使用DependancyWalker(http://www.dependencywalker.com)或其他一些列出DLL导出的工具来获取你想要的错误名称,但你最好做的是所建议的。

答案 2 :(得分:0)

我建议只输出未编码的名称,而不是尝试计算损坏的名称。要做到这一点,你需要做两件事:

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

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

  3. 总而言之,要确保将您的函数导出为TakeInput,请使用:

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