这是所有C#专家。我已经在这个问题上敲了一段时间,在网上尝试各种建议但没有用。该操作发生在Windows Mobile 5.0中。
我有一个名为MyDll.dll的DLL。在MyDll.h中我有:
extern "C" __declspec(dllexport) int MyDllFunction(int one, int two);
MyDll.cpp中MyDllFunction的定义是:
int MyDllFunction(int one, int two)
{
return one + two;
}
C#类包含以下声明:
[DllImport("MyDll.dll")]
extern public static int MyDllFunction(int one, int two);
在同一个班级中,我通过以下方式调用MyDllFunction:
int res = MyDllFunction(10, 10);
这就是血腥的事情让我“无法找到PInvoke DLL'MyDll.dll'”的地方。我已经验证我可以在系统调用上实际执行PInvoke,例如“GetAsyncKeyState(1)”,声明为:
[DllImport("coredll.dll")]
protected static extern short GetAsyncKeyState(int vKey);
MyDll.dll与可执行文件位于同一文件夹中,我也尝试将其放入/ Windows文件夹中,没有任何变化也没有成功。非常感谢任何建议或解决方案。
答案 0 :(得分:4)
我有同样的问题,但这次涉及的平台没有明显的区别。为什么它应该是“正常”的东西是如此严重的记录,如此困难,最糟糕的是所有“片状”。 是否有任何工具允许我进入我的PPC模拟器,并逐步检查(a)该DLL是CLR期望它的位置(我已将它放在同一目录中,并且模拟器上的Windows目录 - 我可以看到它是在那里使用模拟器文件资源管理器),(b)CLR可以加载它(有足够的内存等),(c)然后CLR可以找到存在的函数(如果我可以超越愚蠢的那么有用'找不到dll'错误)
我想强迫盖茨或任何'windows mobile'团队使用他们创造的废话。
答案 1 :(得分:2)
也许这似乎是一个显而易见的事情要检查,但是您是否正在为正确的CPU架构编译本机DLL? IIRC,Windows Mobile在多个CPU架构上运行。
答案 2 :(得分:0)
您列出的异常以及您在问题中添加的pinvoke签名分别具有不同的名称:MyDll.dll和ThreadBenchLib.dll。这是一个错字还是问题?
如果不是问题,请尝试在depends中打开DLL。由于依赖性未满足,DLL加载可能会失败。
答案 3 :(得分:0)
我遇到了同样的问题。我使用Depends.exe来查找WinCE dll依赖项,它取决于debug dll。 (MSVCR90D.dll) 为了解决这个问题,我编译了一个发布版本,并确认了依赖关系,之后它运行正常。
我希望能帮助