持经达变

QXR_YangShiWen

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

    (下面这小段写得乱(请原谅我没太多时间好好写),可以有选择的重点看看加粗的文字,可以略过......) 

    用Reflector打开micaps3.exe,依次展开micaps3->micaps3.exe->nmc.micaps3->Program类,可以看到这个Program类只有一个Main()函数,这就是Micaps3.0系统启动的入口点,双击Main()函数,看最后一行代码:Application.Run(new MainWindow());从这行代码确定了Micaps3.0的主窗体就是MainWindow类,看看这个类的.ctor()函数,这个函数就是MainWindow类的构造函数,一般类的构造函数是和类名同名的,这里只所以用.ctor(),是因为Reflector将类的构造函数用MSIL(微软中间语言)显示所致,这个MainWindow类的.ctor()是由Program的Main()函数中的Application.Run(new MainWindow());语句行调用的,因为"new"是生成类的对象命令,按语法,当实例化一个类时,系统会自动调用类的构造函数对类实例(对象)进行初始化,也就是说,看MainWindow的.ctor()函数中的代码就是Micaps3.0启动时的初始化过程,看看这个过程都做了些什么.
     小结:MainWindow类的.ctor()函数即为初始化过程.

这个初始化过程都做了些什么,依次来看....

1、初始化主窗体的界面,包括工具条、启动提示窗口等,这一过程有价值的信息是系统的基础设置文件是:micaps3.0安装目录下的set.ini文件。

2、将启动的一些信息写入Log目录下的日志中,日志文件以日期区隔。

3、接下来主要的就是将模块加入“字典”类中,看代码

    GlobalRes.DeployModual.Add("NMC_MICAPS3_SURFACE", AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"modual\surface");
    GlobalRes.DeployModual.Add("NMC_MICAPS3_AWS", AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"modual\aws");

......
 其中GlobalRes就是上节说的全局设置管理类,其中的DeployModual就是.net中的一个集合类型(字典类),以键值对的形式将Micaps3.0要用到的模块信息存入字典中,方便后期加载使用(估计用的是.net反射,也就是用反射实现了工厂模式,这个估计以后看代码再验证....)  

4、继续初始化窗体,解析启动参数,并将解析后的相关信息存入GlobalRes类中待以后分支对待。

5、初始化地图,这个过程有点长.....

时间不够(手上要做一个小程序,年底前要验收,所以写这个micaps3.0只能用零碎时间),今天先写这些,见谅。

posted on 2008-10-07 22:19  老杨  阅读(964)  评论(0)    收藏  举报