无法找到入口点 (cpp)

Gra*_*ton 2 .net c++ interop

这是一个类似的问题这一个

我想从 C++ 导出一个简单的函数,由 C# 通过 PInvoke 调用。这是我的函数定义:

 int fnValue()
{
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

这是.h文件中的导出定义:

__declspec(dllexport)  int fnValue();
Run Code Online (Sandbox Code Playgroud)

这就是我 PInvoke 函数的方式:

    [DllImport("WhatDll.dll")]
    public static extern int fnValue();
Run Code Online (Sandbox Code Playgroud)

很简单吧?但我得到了一个

System.EntryPointNotFoundException:无法在 DLL“WhatDll.dll”中找到名为“fnValue”的入口点

我使用 dumpbin 检查里面WhatDll有什么,这就是我所拥有的:

00000000 特征 4CFB5C95 时间日期戳 Sun Dec 05 17:34:13 2010 0.00 版本 1 序数基数 4 函数数 4 名称数

序数提示 RVA 名称

   1    2 00011014 ?fnValue@@YAHXZ = @ILT+15(?fnValue@@YAHXZ)
Run Code Online (Sandbox Code Playgroud)

请注意,函数名称后面有一些乱码fnValue

这很令人费解。任何的想法?

Vin*_*inS 5

试着写

extern "C"__declspec(dllexport)  int fnValue();
Run Code Online (Sandbox Code Playgroud)

  • 如果前面没有 extern "C",C++ 编译器将“名称修饰”或“名称修饰”应用于函数名称,以便将更多语义信息从编译器传递给链接器。extern "C" 告诉 C++ 编译器避免修改对标识符的引用。 (2认同)