Jaa


16, .Net Micro Framework研究—模拟器直接运行MF程序

       作者: 刘洪峰

上次用MF做了一个Windows桌面,感觉还不错,所以就想做一做如俄罗斯方块、贪吃蛇之类的小游戏,不过每次用模拟器运行MF程序,都需要打开VS2005的源码程序,然后单击启动。VS2005是个庞大的家伙,启动它至少要半分钟,所以很是麻烦。模拟器有没有可能直接运行MF程序啊(或者说不需安装VS2005及MF开发包,在其它windows上仅借助模拟器就可以运行)?就像一些游戏模拟器一样直接加载相应的文件就可以使游戏运行起来。

既然VS2005能启动运行,我想我们也可以,唯一不同的是模拟器加载的参数不同而已。

这是VS2005启动模拟器时候的命令行参数:

CommandLine = "C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Tools\Microsoft.SPOT.Emulator.Sample.SampleEmulator.exe" "/waitfordebugger" "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.TinyCore.pe" "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.Hardware.pe" "/load:D:\SELF\MF\YFWinMF\YFWinMF\bin\Release\YFWinMF.pe" "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.Graphics.pe" "/load:DC

根据这个信息,我做了一个批处理文件(MF.bat),内容如下:

Microsoft.SPOT.Emulator.Sample.SampleEmulator.exe "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.TinyCore.pe" "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.Hardware.pe" "/load:C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\Microsoft.SPOT.Graphics.pe" "/load:YFWinMF.exe"

注意,我们去掉了"/waitfordebugger"参数,此外最后一个"/load:DC参数我也直接去掉了。此外YFWinMF.exe程序就是VS2005编译后的MF的可执行文件。

运行该批处理试一下,哈!模拟器可以单独启动并且开始运行了YFWinMF.exe程序了。下一步我们要对模拟器进行移植(需要提醒的是,由于模拟器也是用.Net 2.0开发的,所以windows试验平台至少要安装.Net 2.0)。

经过测试发现,模拟器需要如下文件方可移植成功。

此外还需要这些核心文件:

很让人不解的是,模拟器核心库必须要求这些文件在“C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\”目录,也就是说我上面的批处理文件的路径必须与此一样(也可以不一样,不过C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\目录下也必须存在这些文件),否则就提示****.pe文件不存在。为了便于移植,我又编写了一个批处理文件(init.bat),可以方便地创建C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies\目录及下面的文件,内容如下:

md "C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies"

copy *.* "C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Assemblies"

 

MF用户程序有三个文件组成,YFWinMF.exe YFWinMF.exe.manifest YFWinMF.pe。

好了,我们准备工作就绪,把相关文件拷贝到其它机器(windows 2000以上,安装了.Net 2.0),先执行我的Init.bat批处理文件,建立Assemblies文件,然后再执行MF.bat批处理文件。

OK,成功!

模拟器的功能还可以进一步扩展,如修改LCD的分辨率(颜色数目前仅支持16位,设置其它值会有问题),这样我们的模拟器就像PPC一样,也可以横竖屏切换了(这个功能我后续会做),下图就是修改LCD分辨率后运行的效果图:

 

此外在绘图时,还有一点需要注意,MF的窗体类没有Refresh函数(用UpdateLayout命令不好使),这样在配合按键时会显得很迟钝(原先我还以为是模拟器的性能问题呢),经过试验,我自定义了一个Refresh函数,代码如下:

      //窗体刷新

      private void Refresh()

      {

         this.Left = this.Left;

          //this.UpdateLayout();  

}

修改后,那响应真叫一个棒。OK,以后的工作有的做了,各种基于MF的小游戏和小应用就应该源源不断的出来了。