shell定制遇到的问题

按照《Windows CE实用开发技术》一书的9.9节,开始WinCE  shell定制的学习。

 

问题1:

建立New Platform的时候,编译通过,但是运行模拟器仿真时,模拟器居然黑屏了……换了以前的程序,明明下午还好用的模拟器,居然都黑了脸!郁闷了一小个晚上~~实验室该关门,无奈等到第二天再尝试下,居然又奇迹般的恢复了!

原因:

不知道……

难道是我的电脑自我修复了?!#@¥%—+……

 

问题2:

模拟器算是可用了,开始建立IESHELL的测试工程。不过按照书上的陈诉,编译出错。提示的错误是找不到一些头文件(fatal error C1083: Cannot open include file: 'exdisp.h': No such file or directory)。

尝试把缺少的文件复制到工程文件夹下,但是又出现了新的错误,就是这个缺少文件中包含的文件又找不到了……

查看的编译的过程,估计是路径设置的问题,才导致了这些文件的缺失。可是哪个文件是记录编译路径的啊?晕了~~

无奈之下查看了IESIMPLE目录下的文件,发现了obj文件夹,会不会也要把这个文件夹中的内容也复制过去呢?(书上只说要复制.cpp.h.rc文件)。试试吧~~居然成功了……我运气还真不错(*^__^*) 嘻嘻……

原因:

回头查查obj文件夹都是干嘛的去!!!

查到的资料如下:

bin是放最终代码的目录、obj就放中间代码的目录

obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。

修改编译的路径方法: 

  tools-->options   -->Directories   -->Include   files  
  tools-->options   -->Directories   -->library   files

 

 

问题3:

继续修改,设置IEShell为目标设备的Shell,编译,又出现了fatal error C1083: Cannot open include file: 'exdisp.h': No such file or directory这样的错误!貌似和obj文件夹没有关系了……为什么呢?看来路径的选择和这个obj文件夹没有直接的关系

 

 

但是发现,其实是在PARAMETER目录下加了个文件(还不可识别),所以书上说的位置一定有问题。无奈我对此一窍不通啊,都不知道这些语句是干嘛的,查查网上大侠的总结。见WINCE SOURCES文件详解,大致推断出这两句话应该是INCLUDES包含的内容吧。

加上,编译……

于是,问题4出现了……

 

问题4:

加入INCLUDES=$(INCLUDES);$(_WINCEROOT)/PUBLIC/IE/SDK/INC;$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC;语句后,编译报错:
cl : Command line error D2004 : '/I' requires an argument

后来参照http://blog.youkuaiyun.com/Ricky_hu/archive/2009/01/10/3747621.aspx的方法做了修改,总结如下:

INCLUDES= /
$(_WINCEROOT)/PUBLIC/IE/SDK/INC; /
$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC; /

或者INCLUDES=$(_WINCEROOT)/PUBLIC/IE/SDK/INC;$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC;

或者INCLUDES=$(_WINCEROOT)/PUBLIC/IE/SDK/INC
INCLUDES=$(INCLUDES);$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC

这几种方式都可以。这里注意INCLUDES的格式:

分行写的一定要加上“/”并且带“;”(第一种形式)

第二种和第三种格式实质上相同$(INCLUDES)其实就是上边的$(_WINCEROOT)/PUBLIC/IE/SDK/INC

编译,终于通过了!!!O(∩_∩)O~

 

问题5:

关于obj文件夹对包含路径的影响问题。

前面问题2中提到过,加入了从IE文件中拷贝来的obj文件夹后,编译通过了。但是做了些修改,又不好用的情况。在做问题4的实验的时候,也出现了类似的情况。我猜想是拷贝来的obj文件中(放中间代码的目录)恰好包含了正确的编译路径方面的信息,而编译时是先查看obj文件夹中的这些东西,如果有,就不再重新编译。所以即使源文件的路径不正确,但是编译器先看了以前编译的信息,没有对源文件(错误的)再编译,所以恰好通过了。

不知道猜想对不对,有机会请明白人验证吧~~~

 

 

问题6:

继续……

说是在IESHELL.EXE入口下添加下列注册表入口

FILES

BKG.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/BKG.jpg   NK   U
Button0.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button0.jpg   NK   U
Button1.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button1.jpg   NK   U
Button2.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button2.jpg   NK   U
Button3.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button3.jpg   NK   U
Button4.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button4.jpg   NK   U
Button5.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button5.jpg   NK   U
Button6.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button6.jpg   NK   U
Button7.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button7.jpg   NK   U
Button8.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button8.jpg   NK   U
Button9.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Button9.jpg   NK   U
ButtonPOUND.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/ButtonPOUND.jpg   NK   U
ButtonSTAR.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/ButtonSTAR.jpg   NK   U
default.htm   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/default.htm   NK   U
homelogo.gif   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/homelogo.gif   NK   U
Shell.htm   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/Shell.htm   NK   U

但是填写完后,运行,发现原来的shell没有显示,但是新的shell是一片空白。

估计修改有误吧。又查了网上关于注册表的内容,发现其实这些内容并不是写在.reg文件中的……哎,书中的描述实在是有问题,再加上自己一点都不懂~~误会误会了……原来是要填写在.bib文件中的。

注意“BKG.jpg   $(PBWORKSPACEROOT)/IESHELL/ShellFiles/BKG.jpg   NK   U”中间一定要有空格,否则编译会出错。

编译,终于大功告成了!!!

 


 

定制自己的shell界面

 

上面的shell定制式参照《Windows CE实用开发技术》一书,是基于IEshell的定制过程。只是当做学习shell定制的入门,并不符合自己的实际需要。又从网上查阅了相关的介绍,开始了自己的shell界面定制学习~

 

问题1:

定制的过程中发现,做了某些修改之后,尽管重新Sysgen了系统,但是显示的内容并没有改变。比如说修改桌面上的“Microsoft Windows CE……”这行字,去掉了相关的语句,试了好几次都没有变化。后来Sysgen and Build了下,才好用。

总结:

需要查查用pb编译操作系统这几个操作具体都是干嘛用的。

Sysgen

Build and Sysgen

Build and Sysgen Current BSP

Make Run-Time Image

 

在WinCE5.0中,在"Build OS”菜单中,我们会看到不同的编译选项:

  "Sysgen","Build and Sysgen"和"Build and Sysgen current BSP"

  Sysgen:不用多说,当你在"Catalog"中添加或删除了新的item的时候,就用这个吧。

  Build and Sysgen:当你更新了public目录下的源代码的时候,你就需要用这个了。一般比如在打patch以后,可能就需要进行Build and Sysgen了。

  Build and Sysgen current BSP:当你只改变了你的BSP部分的代码,就可以用这个选项。据说,当你改变了platform目录下的代码,也可以用这个,具体没有试过。

  在WinCE6.0中,在VS2005的"Build"菜单中,有一个“Advanced Build Commands”,其中有很多编译选项:

  "Sysgen":相当于执行命令"blddemo -q”,一般第一次编译或者是改变了"Catalog"中的item的时候,就用这个了。

  "Clean Sysgen":相当于执行命令"blddemo clean -q",按照文档上的说明,当修改了 %_WINCEROOT%PublicCEBASEOAKMiscCesysgen.bat的时候,或者改变了以SYSGEN,BSP为前缀的环境变量的时候,需要使用这个来编译。

  在此我说一下我个人的经验,一般只有第一次创建完工程的时候,我会用"Sysgen"命令,以后只要是改变了SYSGEN为前缀的环境变量的设置或者是"Catalog"中的item,我就会使用"Clean Sysgen",而改变了以BSP为前缀的环境变量要看具体情况,也不一定就要用"Clean Sysgen"。继续...

  "Build and Sysgen":相当于执行命令"blddemo",当改变了public目录下的代码,比如你打了WinCE的patch,你就需要用这个了。

  "Rebuild and Sysgen Clean":相当于执行命令"blddemo clean cleanplat -c",相当于清除上一次编译生成的文件,然后重新编译public目录和你的工程。

  "Build and Sysgen Current BSP":相当于执行命令"blddemo -qbsp",仅编译platform目录下的代码。所以当改变了platform目录下的代码的时候或者说改变了BSP的代码的时候,可以用这个来编译。

  "Rebuild and Clean Sysgen Current BSP":相当于执行命令"blddemo -qbsp -c",相当于完全重新编译platform目录下要编译的代码。
原文网址:http://www.fengfly.com/plus/view-68139-1.html

 

 

问题2:

想修改桌面背景图片,按照下面方法试了下,但是发现Sysgen后,修改的内容又变回来了……
windowsce.bmp        $(_FLATRELEASEDIR)/windowsce_qvgap.bmp      NK S
改为:
windowsce.bmp        $(_FLATRELEASEDIR)/Wallpaper_800x600.bmp      NK S
无奈之下采用了另外一种办法,就是把自己要替换的桌面图片重新命名为windowsce_qvgap.bmp,替换原来的图片,效果是一样的~~

 

问题3:

修改桌面上程序的快捷方式。

目录在D:/WINCE500/PBWorkspaces/Emulator/WINCE500/Emulator_x86/cesysgen/oak/files
这个路径下   保存着众多的bib文件   在这里你可以屏蔽掉对应的bib中的lnk文件对应的脚本,然后只仅仅makeimg一下即可。
例如:WordViewor则在viewers.bib文件中的
docviewer.lnk         $(_FLATRELEASEDIR)/Docviewer.lnk         NK
前加上“;”即可
同样的道理My   Documents在wceappsfe.bib文件中,位置为
mydocs.lnk                 $(_FLATRELEASEDIR)/mydocs.lnk                   NK   SH
前面加上“;”即可。

 

问题4:

针对sky2440定制shell,进行了上述修改后发现,还有一些快捷方式没有去掉。主要是开发板上提供的应用程序。

在D:/WINCE500/PBWorkspaces/MyWork/RelDir/smdk2440_ARMV4I_Release目录下找到platform.bib文件,将其中的.lnk文件注释掉

usbcnect.lnk    $(_FLATRELEASEDIR)/usbcnect.lnk   NK  U
EmbedSky.lnk    $(_FLATRELEASEDIR)/EmbedSky.lnk   NK  U
; SerialPort.lnk    $(_FLATRELEASEDIR)/SerialPort.lnk   NK  U
; SKY2440_LCD_change.lnk   $(_FLATRELEASEDIR)/SKY2440_LCD_change.lnk NK  U

这样注释了的结果是,快捷方式没有打包到操作系统中,但是应用程序还是在原来的位置,在windows目录下就可以找到。

 

问题5:

想修改有些快捷方式的名字,拿SKY2440_LCD_change为例。将这个快捷方式的名称重命名为LCD_change:

 

1、将D:/WINCE500/PLATFORM/SMDK2440/FILES目录(这个是开发板BSP包的目录,和上面不同)的platform.bib文件中

SKY2440_LCD_change.lnk   $(_FLATRELEASEDIR)/SKY2440_LCD_change.lnk NK  U

修改为

LCD_change.lnk   $(_FLATRELEASEDIR)/LCD_change.lnk NK  U

 

2、SKY2440_LCD_change.lnk文件名,修改为LCD_change.lnk,文件里面的内容不变

 

3、将D:/WINCE500/PLATFORM/SMDK2440/FILES目录下的platform.dat文件内容修改如下:

Directory("/windows/桌面"):-File("LCD_change.lnk","/windows/LCD_change.lnk")

 

大概是因为修改了bsp包的内容,所以这里需要Sysgen重新编译操作系统(如果只是Make Image会出错),完成~

 

 

 

 

 

 

 

 

 

查到有人说(无论是Windows CE还是Windows Mobile环境,编译各个Driver使用的build.dat使用的是同一个文件,如果发现自己编译的目录下生成了新的build.dat文件,说明现在的dirs文件存在问题,现在的目录没有被加入到dirs中,需要的头文件路径等信息也没有被正常加载)估计是包含文件的路径确实有问题。

重新检查了一遍操作的各个步骤,在sources文件中发现了问题:越看$(_WINCEROOT)/PUBLIC/IE/SDK/INC;$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC;这两条语句越不对~书上说把这两句加到sources文件的末尾,也就是这样

FILE_VIEW_PARAMETER_FOLDER= /
  IEShell.bib /
  IEShell.reg /
  IEShell.dat /
  IEShell.db /
  ProjSysgen.bat /

$(_WINCEROOT)/PUBLIC/IE/SDK/INC;$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC;

在编译的记录中发现了Build.dat有关,这个文件是不是记录了编译的路径呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值