C# 如何解决.NET CF异常;Can';找不到PInvoke DLL;?

C# 如何解决.NET CF异常;Can';找不到PInvoke DLL;?,c#,.net,windows-mobile,pinvoke,C#,.net,Windows Mobile,Pinvoke,这是给所有C#gurus的。我已经为此绞尽脑汁一段时间了,在网上尝试了各种各样的建议,但都无济于事。此操作发生在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) {

这是给所有C#gurus的。我已经为此绞尽脑汁一段时间了,在网上尝试了各种各样的建议,但都无济于事。此操作发生在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文件夹中,但没有更改,也没有成功。非常感谢任何建议或解决方案。

您列出的例外情况和您在问题中输入的pinvoke签名有不同的名称:MyDll.dll和ThreadBenchLib.dll。这是打字错误还是问题


如果不是问题,请尝试在中打开DLL。DLL加载可能由于未满足的依赖关系而失败

也许这似乎是一件需要检查的事情,但是您是否为正确的CPU体系结构编译本机DLL?IIRC,Windows Mobile在多个CPU架构上运行。

我也有同样的问题,但这次在涉及的平台上没有明显的区别。为什么一些被认为是“正常”的东西被记录得如此糟糕,如此困难,最糟糕的是如此“脆弱”。 是否有任何工具允许我进入我的PPC仿真器,并逐步停止检查(a)dll是否在CLR期望的位置(我已将它放在同一个目录中,以及仿真器上的windows目录中-我可以看到它在那里,使用仿真器文件资源管理器登录),(b)CLR可以加载它(有足够的内存等),(c)然后,CLR可以找到存在的函数(如果我可以克服愚蠢的“找不到dll”错误,那么这很有用)


我很想强迫盖茨或任何“windows mobile”团队使用他们创造的垃圾。

我也有同样的问题。我使用Depends.exe查找WinCE dll依赖项,它依赖于调试dll。(MSVCR90D.dll) 为了解决这个问题,我编译了一个发布版本,并确认了依赖关系,然后它就可以正常工作了


我希望能提供帮助

这是打字错误,真名是MyDll.dll您是否在项目中添加了dll作为参考?如果这样做,则不需要手动复制文件。如果问题仍然存在,则可能是由于dll文件未正确构建(可能是不同的平台)。请确保您有足够的可用虚拟内存,因为P/Invoke导入可能会失败。两个项目位于同一解决方案中,并且它们部署在一起,不需要手动上传。在这种情况下,添加一个项目的输出作为对另一个的引用。即使它不能解决您的问题,这也是处理依赖关系的一种好方法。请访问www.trausch.us!荣誉解决方案的平台是“任意CPU”,我正在部署到WM5。然而,出于某种原因,VS2005决定将DLL的平台设置为WM6。实际上,在我回答完这个问题之后,我注意到了这一点。不想丢失所有的输入,因此无论如何都发布了这个问题。Windows Mobile仅在ARM架构上运行,并且自Pocket PC 2003以来一直在运行。啊,好吧。他不知道这一点。谢谢你的更正。对于那些在这里找到答案的人,请参阅伊格纳斯自己给出的答案,了解他为什么接受这个答案。