Delphi 包的设计思想及它与PAS、BPL、DCU、DLL、OXC的关系。
DCP ,BPL分别是什么文件,起什么作用?你在DELPHI中建立一个package然后保存一下,看看.
bpl和Dll比较相似.只是BPL是BORLAND自己弄出来的东西!!!调用也和调用DLL相似,loadpackage()...DCP:delphi编辑软件包;一种包含关于被编译进软件包当中的代码符号信息的文件。
这种文件并不包含编译代码,这些代码实际上存贮在dcu或bpl文件中; BPL:Borland程序包库:在delphi环境设计或应用程序运行时用到的包含有vcl组件的一种文件(这种文件在delphi3中使用.DPL扩展名)
======================================
dcp = delphi compiled package,是 package 编译时跟 bpl 一起产生出来的,记录着 package 中公开的 class、procedure、function、variable、const.... 等等的名称和相对位址。如果 某个控件包 A 引用了 控件包 B,当 控件包 A 编译时,需要 控件包 B.dcp,若 控件包 B 有修改,更改了公开的介面,则 控件包 A 必须在 控件包 B 编译之后重新编译,以引用新的 B.dcp。否则,,当 控件包 A 执行时,执行到引用自 控件包 B 的内容时,就会出现错误。 ==================================================== 一、Delphi中各种文件的介绍,及其关系。
OXC: ActiveX控件。会被安装到某一个组件包DPK中,在Imports中会创建PAS、DCU、DCR三个文件。
DLL: 动态链接库文件,它的Exports exports既可以写在工程文件里面,也可以写在Unit里面,没有区别。
DPK: 组件包文件,它是由多个组件(PAS)集合而成的。
BPL: 包裹文件,其实就是DLL文件,只是在DLL的基础上添加了一些特性:比如检查重复Unit之类。它是Delphi IDE集成开发环境需要的,是DPK编译产生的文件。其中Run-Time类型供运行用的EXE使用,Design-Time类型供Delphi使用。不同的版本格式不一样。它可以像DLL一样写Exports。
DCU: 编译文件,是PAS编译产生的(相当OBJ文件),连接器能使用 DCU ,将代码连接入目标输出文件中。每个Delphi的版本生成的dcu格式都不一样。
二、包的设计思想一个包就是一个在Delphi的IDE环境中被应用程序共享的特殊的动态链接库。包允许我们通过多级应用将我们的程序的一部分当做一个分离的模块供其他应用程序来共享。因为编译之后的DPL是一种特殊的DLL,所以可在属于某个DPK的Unit里面写export语句,
1、静态链接和动态链接。
静态链接就是当一个Delphi工程被编译的时候,工程所需要的所有代码将被直接链接入你的程序执行文件。结果就是执行文件将包含程序所需要使用到的所有单元(units),你也许会说这样代码有点冗长,因为在通常默认情况下,一个Form单元的uses子句列举了至少5个基本单元(如:Windows, Messages, SysUtils等),尽管如此,Delphi还是能够智能地自动链接单元中真正要用到的代码到工程代码中,从而尽可能地减少了执行文件的大小。使用静态链接,我们的应用程序就是一个相对独立的程序,不需要任何额外的支持文件或动态链接库(暂时不考虑BDE和ActiveX构件)。DELPHI中默认使用的就是静态链接方式。
动态链接就是应用程序将和标准的动态链接库(DLL)一起运行。动态链接方式不需要将代码直接建立到每个应用程序中去,单独为多个应用程序提供多线程的库函数支持,任何程序运行期间才需用到的包才将被加载,更值得一提的是:程序在动态方式需要调用的包是自动加载的,因此你不需要专门写加载包的代码。设置方法是:选中在【Project】->【Options】->【Packages】,选中【Build With Runtime Packages】复选框后,再次编译程序,你的程序代码将自动链接到动态运行包,而不是将引用单元都静态链接入你的工程执行文件。 如果有了【Build With Runtime Packages】,那么在编译的时候,那么它是不需要什么DCU/PAS。
例如:
打开Delphi默认的工程(只有一个空白form),F9它将编译生成一个大约365 KB (Delphi7)的可执行文件。然后打开【Project】->【Options】->【Packages】,把【Build With Runtime Packages】选上再编译一下,EXE文件大小就只有17 KB左右了。
我们编译一个Delphi应用程序时默认地没有选择【Build With Runtime Packages】,编译器将把程序运行所需要的代码直接写入你的EXE文件中,因此产生的程序是一个相对独立的程序,并不需要任何附属的支持文件(例如动态运行库文件DLL),这也就知道了为什么DELPHI产生的应用程序为什么都那么大。要建立尽可能小的Delphi程序,方法之一就要充分发挥Borland Package Libraries的作用,简称BPL。
2、包的分类:
大致可分为运行期包(Run-time Packages)和设计期包(Design-time Packages):
运行期包: 当运行程序时提供VCL和库函数的支持,操作上很类似标准的动态链接库。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70080.html