我创建了一个WIN32 DLL项目,其dllmain.cpp如下;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
_declspec(dllexport) float RGBCompare()
{
return 100;
}
我的目标是从C#项目调用方法RGBCompare,并且根据规则,我之前已经提到了dllexport标记。
在C#项目的另一边,我已经定义了一个入口点,如下所示;
namespace LogoFinderWrapper
{
public class LogoFinder
{
[DllImport("LogoIdentifier.dll", EntryPoint = "RGBCompare")]
private static extern float Api_RGBCompare();
public static float RGBCompare()
{
return Api_RGBCompare();
}
}
}
当我调用DLL时,它会引发异常System.EntryPointNotFoundException。
在这方面,请任何人帮助我吗?
答案 0 :(得分:1)
您的本机代码是C ++,导出前名称已损坏。可能的解决方案:
EntryPoint
参数中的受损名称。使用dumpbin
或依赖关系查看器查找损坏的名称。__declspec(dllexport)
来控制导出哪些功能。extern "C"
进行修改。最终选项如下:
extern "C"
{
__declspec(dllexport) float RGBCompare()
{
return 100;
}
}