【WinCE】WinCE程序开发中出现“无法找到PInvoke DLL"Kernel32.dll"”问题的一种解决方法

最近本人参与了一个小项目是做WinCE6.0平台上的应用,开发用的语言是C#。

 

整个开发过程中让我感到十分蛋疼,说实话用C#这样的高级语言去做嵌入式设备上的应用软件并不是种高明的选择。不但一些通用的类库比普通WINFORM少了一半,就连调用的API函数与普通台式机上的WINDOWS系统也不一样。

 

在WINCE中引用DLL然后调用其API函数比较容易出现问题就是WINCE系统经常找不到DLL文件,其原因主要是装有WINCE系统的嵌入式设备其核心是基于ARM的芯片组与普通台式机CPU不一样。因此WINCE中引用的DLL与普通WINDOWS中引用的DLL也不一样。

 

比如常用的"Kernel32.dll",在WINCE程序中引用"Kernel32.dll"就会出现“无法找到PInvoke DLL"Kernel32.dll"”这样的问题。

 

 

原来出现这类问题的原因就在于WINCE和普通WINDOWS两者API函数所在的DLL库是不一样的。

 

在WINCE中,"Coredll.dll"对应了"Kernel32.dll"和"User32.dll"这两个文件了,所以将"Kernel32.dll"换成"Coredll.dll"问题就解决了。

 

        //设置系统时间
        [DllImport("Coredll.dll")]
        
public static extern bool SetSystemTime(ref SystemTime sysTime);

 

此外"Coredll.dll"和"Kernel32.dll"中的API函数也是有区别的,并不能完全划等号。

 

具体"Coredll.dll"中的API函数可以查看这里:

 

http://notbig.blog.163.com/blog/static/213162862010111805228589/

posted @ 2011-07-04 16:45  悠游人生  阅读(6596)  评论(4编辑  收藏  举报