定制一个eVC上的中文模拟器

来源:互联网 发布:简约别墅设计图知乎 编辑:程序博客网 时间:2024/06/05 13:26

转载:http://www.cnblogs.com/walzer/archive/2007/04/15/713880.html

 

中文模拟器这个问题实在被问得太多了,eVC自带的STANDARDSDK_500 Emulator用起来显然不顺手,存在以下缺点:

(1) 不支持中文的,只支持英文。中文显示上去一堆框框。

(2) 不支持FolderSharing。模拟器开起来后,菜单里的Emulator->FloderSharing是灰的,点不了。导致要用到的所有文件都得用Remote FileViewer传上去,不仅麻烦,而且上传的大小总量还有限制。比如你打算用模拟器上的播放器,放个100M的视频文件,这在STANDARDSDK_500 Emulator上就不可能了

(3) 组件有限。想用的API没有。比如计划的最终产品上有IE和WMP,你想用Internet Client接口,但标准模拟器上就是没有。


自己定制模拟器的前提是安装了Platform Builder for Windows CE 5.0。定制步骤如下:

一、建立PBWorkspace,定制语言和组件,编译run-time image

(1) 打开Platform Builder,从菜单File->New Platform新建一个PBWorkspace, 注意在 New Platform Wizard - step3 选BSP时要钩选EMULATOR:X86。在step 4的Design Template我选了MobileHandheld,带的组件比较多,省事。一路NEXT下去。

(2) 在step 4选完DesignTemplate后,别点Finish, 要点Next进到下一步。在这里把Standard SDK for Windows CE都选上,再下一步把网络都勾上。ActiveSync和TCP/IP都是连接模拟器的调试手段,多勾点没什么坏处。在eVC里我比较郁闷的是用ActiveSync作Transport的话,连不上模拟器;而用TCP/IP连接模拟器时有个不好,就是网卡不能处于断开状态,得随便找个路由或者MODEM连上,程序才能下载到模拟器上。这个是后话了。

(3)NEXT到头后,PBWorkspace建好了,自己点菜,往里头加组件吧,应用开发比较常用到的也就是Applications andServices Development,Graphics and Multimedia Technologies, Shell andUserInterface三个目录下面的东东,还有里我的建议是在产开发初期就把所需的组件定好,然后定制模拟器给应用开发人员用,BSP开发好后,同样也加上模拟器上用的那些组件来编译产品的IMAGE,这样应用开发才不会走样。

(4)大家最关心的一步,中文。从PB菜单的Platform->Settings点进去,选择Locale页,然后在Locales:下面的复选框里慢慢找中文吧。其实就在最后一个:中文(中国)。加好后,在Default Language下拉菜单里就可以选“中文(中国)”了。默认的拉丁文国家是在太多了,我一般先点Clear All,然后再找英文(美国)和中文(中国)就够了。

(5) 选完语言后,顺便拜访一下Build Options页。Full Kernel Mode我是比较喜欢,可惜据说运行起来会不稳定,还是别勾了;Enable KITL勾上,多个调试通路也好。

(6) 编译生成一个run-time image. 从菜单里BuildOS->Sysgen. 等半个小时吧。从编译和SDK的原理来说,这步不是必须的。但是如果不SYSGEN而直接BUILDSDK,会弹出下图这个警告框。怕怕,还是SYSGEN一下好了

二、编译SDK

(1)终于等完SYSGEN,现在可以导出SDK了,从PB菜单里点Platform -> SDK -> New SDK.出来个对话框,如下图。这里面的Locale只能选U.S.English和Japanese,这步和SDK的语言没关系,我们选English.点NEXT

(2) 第二步选编程支持,eMedded Visual C++ 4.0 support是必选的,其他看开发规划了。然后就FINISH了

(3) 别急着点Build SDK, 在Configure SDK里还很多好玩的。从PB菜单里点Platform->SDK->Configure SDK, 出来个N多内容的对话框。

A)比较重要的,切到Emulation页,在Configuration里默认的可能是None, 选成Emulator:x86_Release,然后就可以配置内存大小、分辨率和色深了,这点比较重要,以前我还不懂自己定制模拟器时,就在分辨率和色深上吃过亏,模拟器上作好的东西,放到板子上跑完全走了样

B) 首先选Transports页,看看TCP/IP, ActiveSync, KITL三种调试手段都勾上没,选个自己喜欢的作默认。

C) 然后切到Splash Screen页, 可以弄张BMP图片作为SDK安装包启动时的广告界面。我原来以为是可以替换掉每次WINCE模拟器启动时显示的Windows CE那张LOGO图片,看来还没那么好玩。

(4) 编译SDK了。Platform->SDK->Build SDK。这个很快,两三分钟就搞定了。

三、安装SDK,开始爽吧

在WINCE500/PBWorkspaces/%your_workspace%/SDK/里面可以找到刚才编译出来的SDK。先关闭eVC再安装它。安装完后,重新打开eVC,就可以选择这个模拟器了,用法和STANDARDSDK_500模拟器一样,但是功能强多了,有自己定制的组件、分辨率和色深、可以Folder Sharing。我自己弄的一个,发张PP

 

EVC和VC看起来不多,主要区别应该只在SDK/CPU类型的选择,和远程调试方法上面。
关于调试方法,我BLOG的随笔分类里的TOOLS栏目里有一些入门的文章可以参考 http://www.cnblogs.com/walzer/category/61900.html
关于UI编程,在UI分类里有些可以参考 http://www.cnblogs.com/walzer/category/92488.html如果你对FLASH空间的开销不敏感的话,就用MFC;如果对成本敏感,那么就可以用GWES的方案,目前我就是在这基础上做的。GWES的说明位于WINCE500的产品文档的Windows CE Features > Shell and User Interface >Graphics, Windowing and Events里面

 

 

请问博主,我若调用SDK现有的驱动,比如产商提供的ADC驱动,经PB编译后生成一个.dll文件,我是直接调用这个dll中的方法,还是怎么用呢?需要把SDK导出,再在SDK上调用吗,谢谢!

最好不要直接对驱动的DLL进行LoadLibrary进行加载和调用, 这中间还应该有一个系统层. 我只了解"STREAM DRIVER"类型, 以这种流式设备驱动为例

(1) 首先你可以用PB或EVC上的REMOTE PROCESS VIEWER来查看一下板端的DEVICE.EXE里头是否加载了你的DLL, 如果没有,则应该在platform.reg里找找原因; 如果有就进行下一步
(2) 如果在应用程序里调用改驱动DLL里的功能, 那么调用方法分两种,
(a) 一种是CE提供API与DRIVER相接,不直接调用DeviceIOControl.比如你调用CreateFile("COM1:", ...)时, 串口驱动DLL里的COM_Open就被系统调用到了,但你不是直接LoadLibrary后调用COM_Open, 而你调用WaitCommEvent时,驱动里的COM_IOControl(...IOCTL_SERIAL_WAIT_ON_MASK)就会被操作系统调用到了.
(b) 一种是自己添加的驱动,比如你说的ADC驱动,在CE里头应该就没有专用的一套API来调用了,就需要直接用DeviceIOControl函数.那么比方说你在platform.reg里头把这个设备叫"ADC1:",那么你在应用程序里CreateFile(TEXT("ADC1:"),...)拿到HANDLE后, 通过WriteFile调用你驱动里的ADC_Write,通过ReadFile调用驱动里的ADC_Read, 通过DeviceIoControl调用驱动里的ADC_IOControl就可以了.

你要在应用层上调用驱动, 最好是把SDK从PB上导出, 用EVC在SDK上编写应用, 这个你说得对. 在PB里编译应用程序也行, 但下载和调试很麻烦,工作效率不高.

原创粉丝点击