我在使用基于Windows Mobile 5.0模拟器的基本方案时遇到了很多麻烦。我有一个winforms应用程序,最终调用本机代码。部署工作正常,所有本机DLL都复制到winforms .exe相同的文件夹中。我还验证了远程文件查看器工具的情况。
然而,当我启动我的应用程序时,它始终失败并显示“无法找到PInvoke dll - System.MissingMethodException”错误(当调用本机代码时,DllImport属性将变为无用)。我知道本机dll与可执行文件位于同一文件夹中。我还应该做些什么?
我正在使用VS 2008。
答案 0 :(得分:8)
为了扩展Jared的答案,在P / Invoking CF中获得MissingMethodException的四个更常见的原因是:
您是否验证过DLL入口点未修饰dumpbin?
答案 1 :(得分:5)
鉴于错误消息,通常有两个问题之一
__declspec(dllexport)
此外,完整性检查是为了确保DLL名称拼写正确并且缺少.dll后缀。
答案 2 :(得分:0)
你的问题是因为WM5内存管理是垃圾。 DLL从顶部到底部加载,而应用程序从下到上加载。如果您的应用和DLL之间没有足够的空间,您将收到“无法解锁”错误。
WM5为应用程序分配32个32Mb的插槽。
每次WM5为dll分配内存时,它使用最小64Kb块,所以如果你的DLL是32K,它将需要64k,如果你的DLL需要68k,那么WM5将分配2x64Kb - 128Kb。
当WM5加载所需的DLL时,它将始终加载到预先加载的app的底部地址,即如果app 1加载了2×30kb的DLL,则第一个将加载到地址0到64k,第二个来自64到128,那么你的应用程序将从128kb加载其DLL,而不是0,即使你的应用程序运行到一个单独的插槽。
为了使工作正常,您必须提前加载应用程序或从Windows starup文件夹中删除不需要的应用程序。
答案 3 :(得分:-1)
您正在使用的DLL没有您所调用的方法的定义。 所以异常发生.. 它编译好..只在运行时出现问题.. 解决方案是你需要确保DLL中是否存在定义,否则你需要去寻找其他的dll。