[zt]在smartphone2003中使用net compact framework2

来源:互联网 发布:c语言编写文件加密 编辑:程序博客网 时间:2024/05/20 01:11
在VS2005发布之后,开发智能设备的程序员在为net精简版2.0(Net Compact Framework2 以下简称ncf2)的新功能喝彩之余,很郁闷地发现ncf2不提供对smartphone2003系统的支持。其实目前smartphone2003的手机还没进入淘汰阶段,window mobile5的手机依然价位居高不下,尚未进入普通消费者的视线。使用ncf2进行 smartphone2003编程绝对是程序员的最爱,支持com、支持API函数回调……为此,本文中将介绍一种方法以便使ncf2开发的程序在Smartphone2003中跑得欢快8)
   
    我们先了解一下net程序的工作原理:net程序编译后将产生一种中间语言MSIL, 然后在执行时由公共语言运行时clr将其编译为本机的可执行代码运行。这就是一个Ncf2.0的程序完全可以在桌面计算机运行的原因(当然,这个ncf2.0程序中不能有对WINCE API的调用)。而net程序的运行还将依赖一系列的装配件,比如system.window.form.dll之类的提供支持。Net装配件是自描述的,也就是说可以在这个dll中找到它运行所需要的全部信息,而不需象以前的com对象一样要依赖注册表。
   
    另外,有一个非常重要的消息是ncf完全支持Pocket pc 2003 phoneEdition,这是非常重要的,PPC2003、Smartphone2003、wince其实是一母三胎,它们拥有相似的API,实际上wince的API是这三个系统的共用标准。
   
    有了这两个前提,我几乎可以确定,ncf2在得到了所需要的net运行时库clr的支持后,完全可以在smartphone2003下运行!由于这个原因,我决定自己提取ncf2所需的net运行时库。

   在观察VS2005对未安装设备的模拟器(随便提及一下,VS2005的模拟器模拟的cpu就是我们真正手机上的arm CPU)的进行部署的情况,我发现:在Microsoft Visual Studio 8EN安装目录下的SmartDevices/SDK/CompactFramework/2.0/v2.0/WindowsCE/wce400/armv4文件夹下有一个叫NETCFv2.ppc.armv4.cab的安装包。上帝啊,为这个伟大的发现而欢呼吧!

    但情况并没有想象中那么乐观,在将这个安装包复制到smartphone设备上安装后,出现错误:本安装在此设备上不支持(具体说明不记得了,大概是这个意思)。狂晕,但所有的一切都无法阻止对ncf2在smartphone2003中使用强烈向往的我的步伐。
 
    我将这个CAB包用winrar软件解压缩,发现了一个非常特别的东西:_setup.xml,打开一看,上帝、上帝也被感动得哭了。。。这个XML文件的前面的信息如下,完整文件可以看你提取的文件:

<wap-provisioningdoc>
<characteristic type="Install">
<parm name="InstallPhase" value="install" />
<parm name="SetupDLL" value="1" />
<parm name="ProcessorType" value="2577" />
<parm name="OSVersionMin" value="4.0" />
<parm name="OSVersionMax" value="4.999" />
<parm name="BuildNumberMin" value="0" />
<parm name="BuildNumberMax" value="-536870912" />
<parm name="PlatformString" value="PocketPC" />
<parm name="PlatformMin" value="3.0" />
<parm name="PlatformMax" value="3.999" />
<parm name="UnsupportedPlatforms" value="HPCJUPITERSMARTPHONE" />
<parm name="AppName" value="Microsoft .NET CF 2.0" />

   这个文件一看前面的内容就知道这是cab包安装所需的信息,而据我所知,cab只不过是一种很普通的压缩格式之一,用winzip、winrar之类的软件就可以查看,而对于愚蠢的知能设备来说,它可以理解的除了这个文件指导的信息之外,应该不会有任何比解压缩软件知道得更多的东西了。于是我试着将<parm name="UnsupportedPlatforms" value="HPCJUPITERSMARTPHONE" />这一句删除,将<parm name="PlatformString" value="PocketPC" />的value改为"SMARTPHONE", 然后将文件重新打包回cab,再复制到smartphone2003中运行,欢呼吧!我的朋友们,这个试验失败了8D,smartphone依然毫不留情地给出了本安装在此设备上不支持的提示。

   我不放弃,在编程中永远不要放弃,每一次尝试都会告诉你希望就在拐角!我再将翻阅了这个xml文件,发现下面的节就是文件操作的信息,除了几个很明显的建立目录的信息节外,就是提取文件的信息:
<characteristic type="netcf2_0license.txt" translation="install">
<characteristic type="Extract">
<parm name="Source" value="NETCF2~1.001" />
<parm name="NoDateCheck" />
<parm name="WarnIfSkip" />
</characteristic>
</characteristic>
<characteristic type="MSCOREE2_0.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="MSCORE~1.002" />
<parm name="NoDateCheck" />
<parm name="WarnIfSkip" />
</characteristic>
</characteristic>
     根据上文所说的net常识,很多人都会忽略这一点:net 的装配件是自描述的,高度独立的,它们不依赖于系统的任何注册表之类的支持。我抱着这个想法将cab包的文件按指示那样一个个改名,如上所示,我将NETCF2~1.001改为netcf2_0license.txt" translation="install,将MSCORE~1.002改为MSCOREE2_0.dll......这个工作是枯燥无味的,一共大约20多个文件。改命完成之后,我将这些文件复制到我用ncf2编写的程序目录中(用VS2005编写的Windows Mobile 5 for smartphone程序),然后将所有文件一起复制到smartphone2003的设备上,运行这个程序......
  
    世界原来这样美好。
   
    注:这个测试并没有完全进行,我在一看到ncf2程序正常运行的界面就以颤抖的双手打下了这篇文档。你必须记住这是从ppC2003的安装包提取出来的东西,而smartphon2003有一些不支持的ppc2003的API函数,所以在发布前还必须进行详细的测试,比如你不要期等smartphone2003的button控件。所以建议使用VS2005以开发windows mobile5 for smartphone 的方式开发,而且要小心观察smartphopne2003不支持的wm5的一些新特性。 令人高兴的是,在发布本文的前几分仲,我在form上放了一个datagrid,然后运行,这个程序在smartphone2003跑得很欢快。。。

    这是我写的第一篇 blog ,作为一个程序员,我不是一般的懒,只有懒虫才会想着怎么用代码产生最自动化的东西8),我只会在我喜欢的时候写一些心得,但希望大家还是给这个blog足够的支持,这儿以后一定会有你喜欢的东西的8)

    我的联系方式:QQ:85403578,也可以发猫儿给我missilecat@163.com,作为猫的同类大懒猫,我有空的话会回复的8-) 
 

原创粉丝点击