一晃又一个星期去了,在yygw大哥和众兄弟的支持下,我再来一关于cnpack框架方面的体会,很短,
见笑了哦!(哪来的鸡蛋,包子。。。。#¥%^##@
)
由于偶很懒,几天没看cnpack源码了
,主要是对cnpack的框架是如何设计和组织的还一头雾水,不知该如何看起,太多源码了,打开来看了一下,头晕晕的,又关上了。昨天硬着头皮看了一下,总算是有点眉目了,有些地方还没理解清楚也不管了,先发表弄点稿费花花。。。
嘻嘻。
首先我们打开源文件,位于source\wizard下的cnwizard_d7.dpr。此时显示:
library CnWizards_D7;
uses
ShareMem,
CnWizDllEntry in 'Framework\CnWizDllEntry.pas', //这是入口点,调用 cnwizards.pas
CnBaseWizard in 'Framework\CnBaseWizard.pas',
CnWizards in 'Framework\CnWizards.pas', //这才是关键
CnWizMultiLang in 'Framework\CnWizMultiLang.pas' {CnTranslateFrm},
CnWizUtils in 'Utils\CnWizUtils.pas',
CnWizAboutFrm in 'Framework\CnWizAboutFrm.pas' {CnWizAboutForm},
CnWizCommentFrm in 'Framework\CnWizCommentFrm.pas' {CnWizCommentForm},
CnWizConfigFrm in 'Framework\CnWizConfigFrm.pas' {CnWizConfigForm},
CnWizConsts in 'Framework\CnWizConsts.pas',
.........
........
.......
.
.
begin
end.
这倒底是个什么文件格式呢?我们知道cnpack是通过dll文件来执行的,好,我们新建一个dll wizard,看到了没,其格式就是:
library Project1;
uses
SysUtils,
Classes;
{$R *.res}
begin
end.
至此,我们很容易理解了,cnpack就是通过建立一个dll主文件,然后再在里面调用(uses)其他源文件模块如:'Framework\CnWizDllEntry.pas'、'Framework\CnBaseWizard.pas',等,从而将各个模块连成一个整体的。接下来我们看看这些源码文件是做些什么用的呢?
因为cnpack开发组的编码很规范,所以我们很容易从文件名称上看出来是做什么用的。首先我们看第一个'Framework\CnWizDllEntry.pas',这个名称很容易让人联想到是dll文件的入口点。打开来看看,呵呵,果然不出所料,里面的注解写得很清楚了。我们一行行的往下看,// 专家dll初始化入口函数function InitWizard(const BorlandIDEServices: IBorlandIDEServices;
RegisterProc: TWizardRegisterProc;
var Terminate: TWizardTerminateProc): Boolean; stdcall;
其中IBorlandIDEServices,TWizardRegisterProc,TWizardTerminateProc是在ToolsAP中声明的(用你的鼠标放上去就会有提示的)。按住CTRL跟踪到ToolsAPI里面看看到底是如何声明的。也可以有MSDN中查看。(~~汗,我现在也还不知道是做什么用的,知道的说一下哦
)
再往下看,快到文件底端时,CnWizardMgr := TCnWizardMgr.Create;
估计是创建一个cnpack实例了,在TCnWizardMgr按CTRL跟入,发现是打开了cnwizards.pas,哈哈,里面的注解已经讲得清楚了,我就不多说了,这个源文件可是关键啊。'Framework\CnBaseWizard.pas'之类的文件也是重要的,
由于时间有限,我就没有深入分析下去了。但我已经打开了分析之门,以后再看源码时就不会再有跟我一样一头雾水的感觉了。
文章很短很浅,浪费各位的时间了,
关于后续跟踪,咱们以后再见