1

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

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

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

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

4

3 回答 3

4

为了避免名称混淆,请使用extern "C"

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

更多阅读:使用外部指定链接

于 2011-07-01T11:37:40.027 回答
0

我建议不要尝试计算损坏的名称,而是只导出未损坏的名称。这样做,你需要做两件事:

  1. 通过为您的函数使用 C 链接来禁用 C++ 名称修改您可以使用extern "C".

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

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

extern "C" __declspec(dllexport) void __cdecl TakeInput();
于 2011-07-01T11:51:54.400 回答
0

如果您真的想要,您可以使用 DependancyWalker (http://www.dependencywalker.com) 或其他列出 DLL 导出的工具来获取损坏的名称,但您最好按照 Armen 的建议进行操作。

于 2011-07-01T11:48:22.340 回答