在WinCE6.0中,添加自定义的工程模板
作者:ARM-WinCE
目前,创建WinCE6.0的工程的时候,都是打开VS2005,然后创建一个Platform Builder for CE6.0的工程,然后根据Wizard的提示,一步一步下去。在整个创建过程中,首先选择BSP,然后就是选择模板,如图:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 387pt; HEIGHT: 339pt" type="#_x0000_t75"><imagedata o:title="未命名" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata></shape>
上面这些模板都是微软提供的,这些模板的描述文件可以在” \WINCE600\PUBLIC\CEBASE\CATALOG”下面找到。实际上,这些模板都是一些基于xml的描述文件。其中最简单的应该是” odtsmall_footprint.pbcxml”。对应上图中的模板应该是”Small Footprint Device”。下面我先对该模板做个简单介绍:
用记事本打开”odtsmall_footprint.pbcxml”文件,我们可以看到整个模板的架构如下:
<CatalogFile …>
<FileInformation …>
…
</FileInformation>
<OSDesignTemplate …>
…
</OSDesignTemplate>
</Catalogfile>
A. FileInformation,格式如下:
<FileInformation …>
<Title>…</Title>
<Vendor>…</Vendor>
<OSVersion>…</OSVersion>
<FileVersion>…<FileVersion>
</FileInformation>
这部分主要提供一些模板的信息,比如模板的名字,厂家,OS的版本等。
B. OSDesignTemplate,格式如下:
<OSDesignTemplate …>
<Title>…</Title>
<Description>…</Description>
<CoreOSId>…</CoreOSId>
<Settings>
…
</Settings>
<SelectionPage>
…
</SelectionPage>
<SelectionPage>
…
</SelectionPage>
</OSDesignTemplate>
这部分包含与OS相关的设置以及对OS的定制,比如编译选项,选择了OS中的哪些模块,后面会举个例子来详细介绍。
同在一个目录下还有很多其他的模板,比如”odtpda.pbcxml”是一个PDA模板,这些都是基于xml描述性语言的,都可以用记事本打开,也比较容易理解。
我们在创建工程的时候可以根据自己产品的需要选择相似的模板。问题是我们的产品不可能和微软的模板完全一致,所以在创建工程后还是要手动添加或删除一些组件,或者是更改一些设置。
下面介绍根据自己产品的需要来为自己的产品创建一个模板:
1. 首先复制” odtsmall_footprint.pbcxml”文件,然后改名为” odtYourProduct.pbcxml”。
2. 用记事本打开”odtYourProduct.pbcxml”,编辑FileInformation部分,如下:
<FileInformation Id="FileInformation:CompanyName:YourProduct">
<Title>Your Product Template Device</Title>
<Vendor>CompanyName</Vendor>
<OSVersion>6.00</OSVersion>
<FileVersion>6.00</FileVersion>
</FileInformation>
可以根据需要在Title中设置产品模板的名称,在Vendor中设置厂家。这部分比较简单,不多介绍了。
3. 编辑OSDesignTemplate部分中开始的Title和Description,如下:
<OSDesignTemplate Id="OSDesignTemplate:CompanyName:YourProduct">
<Title>Your Company's Product Device</Title>
<Description>Select the product's template for your device</Description>
<CoreOSId>CoreOS:MS:cebase</CoreOSId>
4. 编辑OSDesignTemplate部分中的Setting,如下:
<Settings>
<!-- ################ Applications - End User ###################### -->
<ItemId>Item:MS:sysgen_as_base</ItemId>
<ItemId>Item:MS:sysgen_as_file</ItemId>
…
<!-- ########## Applications and Services Development ############## -->
<ItemId>Item:MS:sysgen_dotnetv35</ItemId>
<ItemId>Item:MS:sysgen_dotnetv35_support</ItemId>
…
<!-- ########## Communication services and Networking ############## -->
<ItemId>Item:MS:sysgen_eap</ItemId>
<ItemId>Item:MS:sysgen_gateway</ItemId>
…
<!-- #################### Core OS services ######################### -->
<ItemId>Item:MS:sysgen_battery</ItemId>
<ItemId>Item:MS:sysgen_cerdisp</ItemId>
…
<!-- ############### File System and Data Store #################### -->
<ItemId>Item:MS:sysgen_fsreplbit</ItemId>
<ItemId>Item:MS:sysgen_nkcompr</ItemId>
…
<!-- ############## USB #####################-->
<ItemId>Item:MS:sysgen_usb</ItemId>
<ItemId>Item:MS:sysgen_usb_hid</ItemId>
…
<BuildOption Configuration="Retail">IMGNODEBUGGER</BuildOption>
<BuildOption Configuration="Retail">IMGNOKITL</BuildOption>
<BuildOption Configuration="All">IMGNOTALLKMODE</BuildOption>
<BuildOption Configuration="Retail">WINCESHIP</BuildOption>
<BuildOption Configuration="All">IMGRAM64</BuildOption>
</Settings>
这部分包括了OS的定制,所有需要的模块都可以在这部分定义,同时对编译选项作了一些设置。比如对于Release模式,取消KITL,Full Kernel Mode以及允许image大于<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="64" unitname="m"><span lang="EN-US"><font face="Times New Roman">64M</font></span></chmetcnv>等。这里只是一个简单的例子,里面列举了一些OS中的模块,实际用户可以根据自己的需要添加更多的模块。
5. 在OSDesignTemplate中添加SelectionPage,如下:
这部分不是必须有的,没有也可以,完全是根据需要。比如有两套产品,一套是多媒体产品(MultiMedia Product),另一套是网络产品(Network Product),这两套产品根据功能不同,对OS内部模块的要求也不同,这时候就可以用SelectionPage来让用户选择所需的模块。
<SelectionPage>
<Title>Company's Product</Title>
<Description>Select the Product Number.</Description>
<OptionGroup ChildMultiSelect="false">
<Option Default="true">
<Title>Company's Product Device</Title>
<Description>Select the Company's Product Device</Description>
<OptionGroup ChildMultiSelect="false">
<Option Default="true">
<Title>MultiMedia Product</Title>
<Description>Company's MultiMedia Device</Description>
<Settings>
<ItemId>Item:MS:sysgen_audio</ItemId>
<ItemId>Item:MS:sysgen_localaudio</ItemId>
<ItemId>Item:MS:sysgen_streamaudio</ItemId>
<ItemId>Item:MS:sysgen_streamav</ItemId>
…
</Settings>
</Option>
<Option>
<Title>Network Product</Title>
<Description>Company's Network Device</Description>
<Settings>
<ItemId>Item:MS:sysgen_auth</ItemId>
<ItemId>Item:MS:sysgen_ethernet</ItemId>
<ItemId>Item:MS:sysgen_gateway</ItemId>
<ItemId>Item:MS:sysgen_gateway_logging</ItemId>
<ItemId>Item:MS:sysgen_ipsec</ItemId>
…
</Settings>
</Option>
</OptionGroup>
</Option>
</OptionGroup>
</SelectionPage>
在SeletionPage中包含了两个Option,一个是MultiMedia Product,另一个是Network Product,每个Option中的Settings里面又添加了和该产品相关的OS组件。
6. 在OSDesignTemplate中添加SelectionPage,如下:
可以使用SelectionPage继续添加需要用户选择的功能,比如语言,用户可以选择不同的语言。
<SelectionPage>
<Title>Language Types and Features</Title>
<Description>Select the desired language types and features</Description>
<OptionGroup>
<Option Default="true">
<Title>Select the desired language types</Title>
<OptionGroup ChildMultiSelect="false">
<Option>
<Title>Multilingual User Interface</Title>
<Description>Include English, SC and TC</Description>
<Settings>
<ItemId>Item:MS:sysgen_multiui</ItemId>
<ItemId>Item:MS:sysgen_fonts_simsun_2_50</ItemId>
<ItemId>Item:MS:sysgen_mspy3_db_1</ItemId>
<ItemId>Item:MS:sysgen_spim_mspy_large</ItemId>
<ItemId>Item:MS:sysgen_gb18030</ItemId>
<ItemId>Item:MS:sysgen_mspy3_sc</ItemId>
…
</Settings>
</Option>
<Option>
<Title>Simplified Chinese</Title>
<Description>This Chinese is used in mainland <country-region w:st="on"><place w:st="on">China</place></country-region></Description>
<Settings>
<ItemId>Item:MS:sysgen_fonts_simsun_2_50</ItemId>
<ItemId>Item:MS:sysgen_mspy3_db_1</ItemId>
<ItemId>Item:MS:sysgen_spim_mspy_large</ItemId>
<ItemId>Item:MS:sysgen_gb18030</ItemId>
<ItemId>Item:MS:sysgen_agfa_font</ItemId>
<ItemId>Item:MS:sysgen_mspy3_sc</ItemId>
</Settings>
</Option>
<Option>
<Title>Traditional Chinese</Title>
<Description>This Chinese is used in <country-region w:st="on"><place w:st="on">*</place></country-region></Description>
<Settings>
<ItemId>Item:MS:sysgen_pime_tc</ItemId>
<ItemId>Item:MS:sysgen_phonim</ItemId>
<ItemId>Item:MS:sysgen_chajeiim</ItemId>
<ItemId>Item:MS:sysgen_fonts_mingliu_2_70</ItemId>
<ItemId>Item:MS:sysgen_agfa_font</ItemId>
</Settings>
</Option>
<Option Default="true">
<Title>Western: Standard</Title>
<Description>This includes English, German, French, etc</Description>
<Settings>
</Settings>
</Option>
</OptionGroup>
</Option>
</OptionGroup>
</SelectionPage>
7. 完成OSDesignTemplate部分
最后只要保证<OSDesignTemplate>…</OSDesignTemplate>就可以了。
上述步骤就算是完成了一个自定义的模板,然后我们来看看效果,首先打开VS2005创建一个WinCE6.0的工程,如图:
<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 259.5pt" type="#_x0000_t75"><imagedata o:title="1" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.jpg"><font size="3"></font></imagedata></shape>
名字就命名为”YourProduct”,然后选择”Next”,如图:
<shape id="_x0000_i1028" style="WIDTH: 395.25pt; HEIGHT: 347.25pt" type="#_x0000_t75"><imagedata o:title="2" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image004.jpg"><font size="3"></font></imagedata></shape>
根据自己的需要选择相应的BSP,这里选的是x86的BSP,然后下一步,如图:
<shape id="_x0000_i1029" style="WIDTH: 396pt; HEIGHT: 345.75pt" type="#_x0000_t75"><imagedata o:title="3" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg"><font size="3"></font></imagedata></shape>
这时候,我们可以看到我们添加的模板了,名字是”Your Company’s Product Device”,选择它,然后下一步,如图:
<shape id="_x0000_i1030" style="WIDTH: 396.75pt; HEIGHT: 347.25pt" type="#_x0000_t75"><imagedata o:title="4" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image006.jpg"><font size="3"></font></imagedata></shape>
可以看到有两个产品,多媒体产品和网络产品,这里就选”MultiMedia Product”,然后下一步,如图:
<shape id="_x0000_i1031" style="WIDTH: 395.25pt; HEIGHT: 345.75pt" type="#_x0000_t75"><imagedata o:title="5" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.jpg"><font size="3"></font></imagedata></shape>
可以看到语言选择对话框,默认选择”Western: Standard”,然后下一步,如图:
<shape id="_x0000_i1026" style="WIDTH: 395.25pt; HEIGHT: 346.5pt" type="#_x0000_t75"><imagedata o:title="6" src="file:///C:%5CDOCUME~1%5CTANG~1.MIA%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image008.jpg"><font size="3"></font></imagedata></shape>
到这一步,已经完成了,工程已经被创建出来,这个工程就是根据自己的模板创建出来的,所以不需要做什么修改和设置,直接编译就可以了。
最后再总结一下:其实微软提供的所有的工程模板都是一些基于xml的文件,这些文件的内容还是比较容易理解的。我们可以选择微软的模板创建工程,然后根据需要来更该设置或者添加删除组件。另一种方法就是根据产品需要添加自己的模板,在该模板中选择必要的OS组件以及设置,这样任何人都可以使用该模板来创建并编译工程了。
下面是我自己创建的一个工程模板的代码,应该可以使用,仅供参考: