这是与this one类似的问题。
我想从C ++导出一个简单的函数,由C#通过PInvoke调用。这是我的函数定义:
int fnValue()
{
return 42;
}
这是.h
文件中的导出定义:
__declspec(dllexport) int fnValue();
这就是我实现该功能的方式:
[DllImport("WhatDll.dll")]
public static extern int fnValue();
简单,对吧?但我得到了一个
System.EntryPointNotFoundException: 无法找到一个名为的入口点 DLL中的'fnValue'“WhatDll.dll'
我使用dumpbin来检查WhatDll
里面的内容,这就是我所拥有的:
<00> 00000000特性4CFB5C95 时间日期戳Sun Dec 05 17:34:13 2010 0.00版本 1个序数基数 4个功能 4个名字序数提示RVA名称
1 2 00011014 ?fnValue@@YAHXZ = @ILT+15(?fnValue@@YAHXZ)
请注意,函数名称fnValue
背后有一些乱码。
这非常令人费解。有什么想法吗?
答案 0 :(得分:4)
尝试写
extern "C"__declspec(dllexport) int fnValue();
答案 1 :(得分:0)
如果使用c ++编译器进行编译,请使用extern "C"
导出或添加.def文件以指定导出名称。
另外__stdcall
可能是必要的