(下面这小段写得乱(请原谅我没太多时间好好写),可以有选择的重点看看加粗的文字,可以略过......)
用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只能用零碎时间),今天先写这些,见谅。

浙公网安备 33010602011771号