无法找到入口点 (cpp)
Posted
技术标签:
【中文标题】无法找到入口点 (cpp)【英文标题】:Unable to Find an Entry Point (cpp) 【发布时间】:2010-12-05 10:15:43 【问题描述】:这是一个与this one类似的问题。
我想从 C++ 中导出一个简单的函数,由 C# 通过 PInvoke 调用。这是我的函数定义:
int fnValue()
return 42;
这是.h
文件中的导出定义:
__declspec(dllexport) int fnValue();
这就是我 PInvoke 函数的方式:
[DllImport("WhatDll.dll")]
public static extern int fnValue();
很简单,对吧?但我有一个
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)
注意函数名fnValue
后面有一些乱码。
这很令人费解。有什么想法吗?
【问题讨论】:
【参考方案1】:试着写
extern "C"__declspec(dllexport) int fnValue();
【讨论】:
@Thanks,为什么我需要在前面extern "C"
?
如果前面没有 extern "C",C++ 编译器会将“名称修饰”或“名称修饰”应用于函数名称,以便将更多语义信息从编译器传递给链接器。 extern "C" 告诉 C++ 编译器避免破坏对标识符的引用。【参考方案2】:
如果您使用 c++ 编译器进行编译,请使用 extern "C"
导出或添加 .def 文件来指定导出名称。
另外__stdcall
可能是必要的
【讨论】:
以上是关于无法找到入口点 (cpp)的主要内容,如果未能解决你的问题,请参考以下文章
Windows Xp - 无法找到入口点 gettickcount64 kernel32.dll
System.EntryNotFoundException:无法在 DLL 中找到入口点
acrobat.exe无法找到入口无法定位程序输入点,无法识别编辑图片上文字
无法在 DLL 'kernel32.dll' 中找到名为 'InterlockedIncrement' 的入口点 - VS2005@Win7 64 位