在Windows Mobile中找不到PInvoke DLL错误

Dil*_*lip 12 .net pinvoke compact-framework emulation windows-mobile

我在使用基于Windows Mobile 5.0模拟器的基本方案时遇到了很多麻烦.我有一个winforms应用程序,最终调用本机代码.部署工作正常,所有本机DLL都复制到winforms .exe相同的文件夹中.我还验证了远程文件查看器工具的情况.

但是,当我启动我的应用程序时,它始终失败并显示"无法找到PInvoke dll - System.MissingMethodException"错误(当调用本机代码时,DllImport属性将变为无用).我知道本机dll与可执行文件位于同一文件夹中.我还应该做些什么?

我正在使用VS 2008.

cta*_*cke 8

为了扩展Jared的答案,在P/Invoking CF时获得MissingMethodException的四个更常见的原因是:

  1. 您缺少要调用的本机库的依赖项.
  2. 原生的assmebly是为错误的子系统编译的(即桌面,而不是CE)
  3. 本机程序集是为错误的处理器编译的(即x86而不是ARM)
  4. 您没有足够的虚拟内存来加载DLL.

你有没有用dumpbin这样的东西验证DLL入口点是不修饰的?


Jar*_*Par 5

鉴于错误消息,通常有两个问题之一

  1. 它找不到DLL.通过查看执行目录和PATH环境变量找到DLL
  2. 它找不到DLL中的函数.您是否检查过以确保DLL的声明和定义都是extern"C"并标记为__declspec(dllexport)

此外,完整性检查是为了确保DLL名称拼写正确并且缺少.dll后缀.