从 \WIndows 导入 Win CE DLL 抛出 MissingMethodException

Win CE DLL Import from \WIndows throws MissingMethodException

我试图通过 .Net CF 3.5 应用程序调用 PInvoke 'i2csdk.dll',它位于我的 Windows CE 7 设备上的 \Windows 目录中。当我尝试执行 PInvoke 时,我得到一个带有附加信息的 'System.MissingMethodException' 无法找到 PInvoke DLL 'i2csdk.dll'。来自 coredll.dll 和 ceddk.dll 的任何函数的 PInvoke 工作正常,它们都位于 i2csdk.dll.

旁边的 \Windows 目录中

我已经证实 i2csdk.dll 在 运行 时间内确实存在于 \Windows 中。

我也知道 DLL i2csdk.dll 编译正确,因为当我将 i2csdk.dll 复制到与我的应用程序相同的目录时,调用成功。这也告诉我这个 DLL 不依赖于另一个 DLL。

我错过了什么吗?是否需要执行某种 DLL 注册步骤?

您可以使用 dependency walker 来查看从该 DLL 导出了哪些方法,或者,如果您自己构建它,则可以检查 .def 文件。 如果 DLL 是在 C++ 中实现的并且您使用 dllexport 属性,则真正的函数名称是 "mangled",添加一些用于区分相同基函数重载的装饰,如果您将函数包装在 extern "C" 块,我强烈建议改用 def 文件以避免错误导出。 如果 DLL 在您的 \Windows 文件夹中,这通常意味着它是 OS 图像的一部分,如果它已作为内核模式模块包含在内(使用 bib 文件中的 K 标志),您可以'不要从用户模式应用程序访问它。