来自\ WIndows的Win CE DLL导入抛出MissingMethodException

时间:2016-07-19 17:31:47

标签: c# windows pinvoke windows-ce .net-cf-3.5

从.Net CF 3.5应用程序我试图在我的Windows CE 7设备上启动位于\ Windows目录中的'i2csdk.dll'。当我尝试执行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注册步骤?

1 个答案:

答案 0 :(得分:1)

您可以使用dependency walker查看从该DLL导出的方法,或者如果您自己构建它,则可以检查.def文件。 如果DLL是用C ++实现的,并且你使用了dllexport属性,那么实际的函数名称会被“修改”,添加一些用于区分相同基函数重载的装饰,如果你将函数包装在extern“C”中,就不会发生这种情况。阻止,我强烈建议使用def文件来避免错误的导出。 如果DLL位于\ Windows文件夹中,这通常意味着它是操作系统映像的一部分,如果它已作为内核模式模块包含(使用bib文件中的K标志),则无法从用户模式应用程序访问它