多个bpl打包成一个bpl的方法(200)

  • 主题发起人 主题发起人 wooiguo
  • 开始时间 开始时间
W

wooiguo

Unregistered / Unconfirmed
GUEST, unregistred user!
程序静态连接的多个bpl,如rtl.bpl,vcl70.bpl...等,如果打包成一个bpl,安装维护方便很多。http://www.delphibbs.com/delphibbs/dispq.asp?lid=3347351前人的帖子,没看懂,请哪位指点一下?
 
可以不用.VCLXXX包可以重新编译的.只要运行时的单元全部都重新打包,和你的包都打成一个包就行了.网上有一篇这样的文档.我以前试过是可以的.我现在的工作上网不太方便.只能在家里上网.对你的回答不够便捷,还请原谅下面是摘抄过来的那篇文章:----------------------------------------------------------------------  这是阿亮第一次写文章,有不正确的地方,欢迎讨论指正。    首先要更正一个错误的结论:只要程序用到Borland的包,就必须要带上VCLxx.bpl。    非也!    想必用Dll来实现功能模块分割的伙计们都有痛苦经历:无法导出类;无法共享主进程的全局变量;调用Dll时可能要传递一大堆参数;令人心烦的PChar;等等等等...  Borland通过包Borland Package Library来解决了这些痛苦,在这里我们只讨论运行时包。    阿亮在2003年就因为工作原因研究了一下Delphi 5的包,并成功的将一个大的系统按功能模块分拆到单个运行时包文件中,当时就想把VCL50.bpl重新编译一下,没有成功,很不甘心!头段时间安装了 Delphi 7,想重新试一下,结果居然成功了,也就是说,你可以写一个个头很小的exe文件(这对于有些程序员来说非常有吸引力,他们希望自己的的程序越小越好,甚至到了痴迷的程度,阿亮也算其中一员),可以多小呢?譬如20KB的exe,这个主程序只是一个框架,它可能仅包含一个主窗休、初始化一些应用需要的全局结构或变量、实现动态装入和卸载包的代码,后面至少带一个被重新编译的VCL包,当然,这个VCL包可能包含所有的Delphi提供的标准单元,也可以仅包含你的应用需要的单元。    你可能发布的应用程序结构可能是以下结构:    App.exe (* 主程序 *)  Borland.bpl (* 被重新编译过的Borland VCL单元运行时包 *)  Common.bpl (* 应用程序公用包, 所有的全局结构和单元定义和实现在此包中,主程序和模块包共同uses此包的的共用单元,以实现全局共享 *)  Module1.bpl (* 模块一 *)  Module2.bpl (* 模块二 *)  ...    其中Borland.bpl和Common.bpl是静态装入的,也就是说App.exe被Windows装入时这两个文件必须在App.exe能够找到的路径中,典型的是在App.exe相同的文件夹或Windows System 文件夹中。  而Module1.bpl、Moudle2.bpl...是需要动态装入的,这一点对于一个应用系统的扩展性非常非常重要!对于应用系统的的可定制性、控制应用的功能结构来说都是具有决定性的意义,理论上说只要你把主框架搭好了以后,模块是可以无限制添加的,你可以用以此框架为基础搭建一个进销存系统,同时它还可以是一个图形系统,或者是一个复杂的ERP系统,这一切都决定于你发布的模块包。    说了这么多,现在我们开始重新编译rtl70.bpl,这个包是所有VCL包的祖先(至少Delphi 7是这样),它包括一些重要的基础单元,如Windows、SysUtils、Classes等,且这个包是唯一一个不依赖其它运行时包的运行时包。    打开Delphi 7    1、 关掉Delphi 创建的默认工程(如果有的话);  2、 File->New->Other,选择Package;  3、 New 一个Form,编译一次;  4、 再切换窗口回到Package – Pacakge1.dpk;  5、 双击Requires节点下的rtl.dcp,将得到rtl.dpk;  6、 按F12切换到rtl.dpk源代码,将其另存如d:/delphi.dpk;  7、 Close All;  8、 Open d:/delphi.dpk,将Options中的Output Diretory及DCP Output Directory文件夹都改在.;  9、 编译它,出错时将VarHlpr、StrHlpr删除掉,阿亮目前还不知道此两单无是干嘛用的,删掉再说;  10、 编译成功,将在D:/生成Delphi.bpl和Delphi.dcp两个文件,其它的如VCL、VCLX、VCLDB等等运行时包的单元名也可以此法得到,添加到Delphi.dpk后面重新编译即可。    这样,发布应用时就不用带着VCL70.bpl、RTL70.bpl、VCLX.bpl等文件了,就一个Delphi.bpl就成了。    当然,凡事有利有弊:    1、 如果共用包(Common.bpl)被重新编译,则主程序和所有的模块包可能都需要重新编译,所以前期共用包和主程序框架的结构要尽可能考虑完整一些;  2、如果你用到第三方控件,请选择那些有源码的控件,因为它们的运行时包也必须要重新编译,去掉RTL、VCL等需要的包,换成Delphi.bcp,这应该也容易,阿亮就将Dxexpress的所有文件重新编译得到Express.bpl。我们很幸运!不是吗?在我们这个时代这些东东很容易找到,并且它们都写得很棒,为什么不用呢!  3、 你可能需要专门写个工具来维护包给你带来的模块版本问题;  4、 如果你有多应用个以动态包的形式发布,解决方法:其一,将Delphi.bpl安装到Windows System文件夹,让你的应用共享这个包;其二,为每个应用发布一个Delphi到应用的安装目录!?而这样将有背于M$的思想,这需要你选择。
 
我就是对阿亮写的不太理解,又迟迟不肯动手,昨晚动手试了一下,正如你所说的,只要运行时的单元全部都重新打包,就可以了。谢谢!
 
后退
顶部