Board logo

Subject: 询问cw是否有此功能 [Print This Page]

Author: niaoge    Time: 2007-8-7 22:57     Subject: 询问cw是否有此功能

功能如下:
每个dpr 或bdsproj 编译后生成一个报表,列出所有引用的单元,
比较两个或多个这样的报表,列出相同的引用单元,这些单元就是共用的部分,以便将共用的部分做个一个包,这样生成的exe就小多了,发布包也小
现在的单元引用清理延伸一下可能就达到这个功能了

工能实现了,我提前在上面显示

此工具是一个cw专家工具
用途我简单描述一下(如果对程序打包不感兴越的朋友可以不往下看):
申明:
首先我申明一下,本人是一个追求完美的人,长久以来有种想法做出下列这样的工具
但是一苦于无处下手,直到4,5月份接触到cw代码,她给了我很好的平台和学习的机会
1.
一个用delphi编译出来的独立程序(exe文件),通常有几M到几十M,愿因是编译器将所有引用单元都编译到这个独立程序(exe文件)中,
对于独立程序(exe文件)组而言,同样编译器会各将各自引用单元都一遍一遍地编译到各自的独立程序(exe文件)中,象一些共同的单元,
如Window.pas.forms.pas,DB.pas.......被重复编译着
以上无论哪种情况都使程序显得庞大和不专业,更不美观,如果是程序组,按行话来说可能就是菜鸟
2.
通常还有一种解决办法是
在程序的Options 内设置 build with packing 加入vcl,rtl,....
这样程序和程序组内的工程编译时,编译器就不会编译vcl,rtl内的单元,而是给出一张导入或导出表,例出引用的单元所在的bpl文件,
这样的带运行时包的程序体积小,对于程序组则是节省了重复编译单元花费的空间,当程序发布时,将vclxx.bpl,rtlxx.bpl........
假如还有第三方控件....bpl,然后发布时连带bpl和这些程序(exe文件)一起发布,
我曾经一直是这么干的
这种看上去很完美,但其实一点也不完美,
之一,包数目多,管理不便,
之二, 调试不便,在你本机运行好好的,可能安装时打包时漏丢了包,到用户那边运行不起来
之三,看似节约空间,其实不节约,愿因是像rtlxx.bpl,vclxx.bpl 含有某些单元我们并不一定在工程中引用,这等于实际上把一些无用的东西
      强塞给了软件使用者
3.
还有一种方法,我从网上看到的,在dpk工程view 内双击引用的dcp,ide自动打开此dcp指定的工程的source,再从source内把引用的单元复制
一下,如些发复,得到所有引vcl,rtl.db,adodb......及第三方包内的单元,
再新建一个dpk工程,引用中加入上述单元,
这实际上等于2中的情况,维一好处是包不多,管理方便
但是这种方法可操作性差,手工工作量巨大,而且对于BDS这种版本,vcl.dcp,rtl.dcp等bordland自带的库双击根本得不到认何东西,所以也就
无从下手
4.如工具所示
通过ide及cw库得到一个工程引用了哪些单元,一个工程组内各自工程引用了哪些单元,
按最多工程组合到单个的工程通过像数学上求最大公约数一样例出每若干个工程组合或工程引用了哪些单元,
再将这些单元导出一个各自的inc文件,然后手工建立(其实可以用程序建立,但是无论是手工或是程序建立的都是一次性工作)惹干个运行时dpk工程,
同时dpk工程内引用相应的inc文件,编译这些dpk得到相应bpl(这些bpl不需要安装到delphi上,也不影响delphi运行),
最后上面工程(exe)只要引用bpl就可以了,这样编译出来的程序美观节约,效率高(没测过),最大化地节约了空间
便于管理,当引用单元发生改变时,重新再编个包,只是按按按钮的这么简单,工具会自动重新生成inc文件,编译一下就OK

5,工具的一些细节注意
对于一些如comserv的单元,不能被编译到bpl时,工具能给出忽略选项
对于工程内的单元需要频繁地调试,工具也能忽略选项,但是如果realse时,还可以重新再打包一个程序组或组合,可以像QQ那样把主程序缩小到几百K以内,
对于工程组合的dpk工程,不需要再打包,工具也能忽略选项
这些忽略选项设定以后有ini文件保存,不需要频繁地从0开始设置这些选项
本 人早上试用此用工具,将我手头的工作含有两个dpr工程组变成3个dpk工程加两个dpk工程的工程组,编译出来的程序小之又小
再试一下rem的列子没问题

6,不足之处
本人研究一VirtualStringTree 一个星期,那些属性搞得我头都大了,这工具本来是要用VirtualStringTree显示和操作,
但是一直苦于对VirtualStringTree不熟悉,昨晚花了一个晚上研究了cxtreeList,很快上手,所以先用cxtreeList,实现工具的工能,待日后再改,
另外本人时间实在有限,这个工具从构思,制作, 修改到"完成"花了1个多星期的时间,现在时间紧,不能再在上面花时间了
所以欢迎对VirtualStringTree各同仁改成VirtualStringTree版的,只有这样此工具和此理念才能被大家分享.
改变VirtualStringTree,对于VirtualStringTree 熟悉的朋友来说,只是两个工作要做,显示,保存,不难吧?

[ 本帖最后由 niaoge 于 2007-8-22 16:31 编辑 ]

Image Attachment: SnapShotImage.gif (2007-8-22 15:41, 27 K) / Download count 350
http://bbs.cnpack.org/attachment.php?aid=346


Author: Passion    Time: 2007-8-8 09:05

输出报表的功能容易点儿,但比较报表和做包的这块就得手工来做了吧?
Author: niaoge    Time: 2007-8-8 09:59



QUOTE:
原帖由 Passion 于 2007-8-8 09:05 发表
输出报表的功能容易点儿,但比较报表和做包的这块就得手工来做了吧?

比较这一块手工做量有点大,如果能用程序做,再自动生成一个报表则更好
做包这一块可能得手功做
Author: niaoge    Time: 2007-8-18 03:00

刘总,这个功能我做了一部分,余下的因为对vtree太不熟悉,快使上吃奶的力气了,不会做的地方我用todo标注了,
我白天大部分时间睡觉,所在先传上来,欢迎对VirtualStringTree熟悉的同行改或重写,
毕竟这个功能对大家都有好处,除了M$,等没人希望做出来的程序用DVD刻录
效果图如图

Image Attachment: incBpl.gif (2007-8-18 03:00, 21.83 K) / Download count 371
http://bbs.cnpack.org/attachment.php?aid=344



Attachment: 打包生成辅助单元.rar (2007-8-18 03:00, 36.55 K) / Download count 419
http://bbs.cnpack.org/attachment.php?aid=345
Author: niaoge    Time: 2007-8-22 09:05     Subject: 太酷了

vtree俺不会用,俺现在用cxTreeList做了,打包太方便了,程序体积缩小了N多,太爽,太酷,
由于cx是商业代码,为了cw,所以不能把代码放在上面,
如果哪位对virtualStringTree很在行,并且有志于改成vtree版的+乐于将改好的代码发给cw,请在下面留言,
我把代码发给他

[ 本帖最后由 niaoge 于 2007-8-22 09:08 编辑 ]
Author: shenloqi    Time: 2007-8-22 09:52

我不知道你做的这个东西跟我给Passion的那个工具有没有重复的功能,我的工具可以分析delphi编译的可执行文件然后列出所有的文件,然后有根据这些信息的分析,不过目前还没有对重复的文件进行分析的功能,加上应该也是比较容易的,Passion正在移植这个工具,不过他目前在国外,可能短期不能更新。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0