【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);
[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/