不与饭圈理论 發表於 2023-12-31 12:30:00

delphi的bpl、dcp 、dcu

<p>&nbsp;&nbsp; BPL &nbsp;英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件。编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文件。既然是DLL文件,那就是在运行时所需要的文件。BPL相当于C++中的DLL</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; DCP &nbsp;英文全称:delphi compiled package,是 package 编译时跟 bpl 一起产生出来的,记录着 package 中公开的 class、procedure、function、variable、const.... 等等的名称和相对位址。如果 某个控件包 A 引用了 控件包 B,当 控件包 A 编译时,需要 控件包 B.dcp,若 控件包 B 有修改,更改了公开的介面,则 控件包 A 必须在 控件包 B 编译之后重新编译,以引用新的 B.dcp。否则,当 控件包 A 执行时,执行到引用自 控件包 B 的内容时,就会出现错误。DCP相当于C++中的Lib,编译时需要。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; DCU &nbsp;英文全称:Delphi Compiled Unit File,是delphi单元文件.pas文件编译后产生的文件</p>
<p>===================</p>
<p><strong>Delphi 系统安装后,有默认的配置如下:</strong></p>
<p><strong>1、在菜单 Tools\Options 中进行全局配置 :主要是:</strong></p>
<p>1)&nbsp;<strong>Environment</strong>&nbsp;Options (环境)</p>
<p>&nbsp; &nbsp; &nbsp;Environment&nbsp;Variavbles: 包括</p>
<p>&nbsp; &nbsp;(系统变量<strong>System</strong>&nbsp;Variavbles / 用户变量<strong>User</strong>&nbsp;Overrides),也可以通过 Windows “高级系统设置”。</p>
<p>&nbsp; &nbsp; &nbsp;Path 的设置 ,即 查找路径 。 用于查找:包Bpl 文件?</p>
<p>2)<strong>Delphi</strong>&nbsp;Options</p>
<p>&nbsp; &nbsp; (1) Libary :(不同运行平台 Win32/64,Android 等下的配置)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>Libary Path</strong>&nbsp;:</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Package Output&nbsp;Path :&nbsp; &nbsp;$(BDSCOMMONDIR)\Bpl&nbsp; &nbsp; &nbsp; 即&nbsp;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Dcp Output&nbsp;Path :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(BDSCOMMONDIR)\Dcp&nbsp; &nbsp; &nbsp;即&nbsp;C:\Users\Public\Documents\Embarcadero\Studio\19.0\DCP</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>Browsing Path</strong>:</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Unit scope names:&nbsp; (默认 空)&nbsp; &nbsp;单元空间名称?在 RAD Studio库(VCL-FMX-RTL)中,<strong>Unit scope names</strong>&nbsp;是预先置于unit names 之前的前缀 ,<strong>通用表示</strong>:&lt;unitscope&gt;.&lt;unitname&gt;. ...&nbsp; &nbsp; 例子有:System.SysUtils,FMX.Controls 等,<strong>SysUtils</strong>&nbsp;unit 现在是<strong>System</strong>&nbsp;unit scope的一部分 ,<strong>Controls</strong>&nbsp;unit 是&nbsp;<strong>Vcl</strong>&nbsp;or the&nbsp;<strong>FMX</strong>&nbsp;unit scope 的一部分!</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Debug DCU Path :</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; HPP&nbsp;Output&nbsp;Path :&nbsp; $(BDSCOMMONDIR)\hpp\$(Platform)&nbsp; &nbsp; 即&nbsp;C:\Users\Public\Documents\Embarcadero\Studio\19.0\hpp\Win32</p>
<p>&nbsp;</p>
<p><strong>2、在项目 Project \ Options 菜单下,进行项目配置:</strong></p>
<p>&nbsp;1)Delphi Compiler 的配置</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Package Output&nbsp;Path :&nbsp; ..\bpl\$(Platform)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;即&nbsp; 项目Project 路径XX\bpl\win32&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;即&nbsp;<strong>.Bpl(包)</strong>文件路径</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Dcp Output&nbsp;Path :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.\$(Platform)\$(Config) &nbsp; &nbsp; 即&nbsp;项目Project 路径XX\win32\Debug&nbsp; &nbsp;&nbsp;即&nbsp;<strong>.Dcp</strong>&nbsp; 文件路径</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Unit Output&nbsp;Path :&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;.\$(Platform)\$(Config)&nbsp; &nbsp; &nbsp;即&nbsp;<strong>.Dcu</strong>&nbsp; 文件路径</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Unit scope names:&nbsp; &nbsp;&nbsp;(默认 继承 Debug 或 Release)</p>
<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; Search Path</strong>:&nbsp; &nbsp;&nbsp;(默认 空)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; Conditional Defines&nbsp; :DEBUG</p>
<p>&nbsp;</p>
<p><strong>说明</strong>:&nbsp;<strong>Dcu</strong>&nbsp;&nbsp;英文全称:Delphi Compiled Unit File,是delphi单元文件.pas文件编译后产生的中间文件,( 相当OBJ 中间文件 ),</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 连接器能使用 DCU ,将代码连接入目标输出文件中。每个Delphi的版本生成的dcu格式都不一样。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dcp&nbsp; 英文全称:delphi compiled package,是 package 编译时跟 bpl 一起产生出来的,记录着 package 中公开的 class、procedure、function、variable、const.... 等等的名称和相对位址。DCP相当于C++中的Lib,编译时需要。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 一种包含关于被编译进软件包当中的代码符号信息的文件,但并不包含编译代码,这些代码实际上存贮在dcu或bpl文件中。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Bpl&nbsp; 英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件。编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文件。既然是DLL文件,那就是在运行时所需要的文件。BPL相当于C++中的DLL。调用也和调用DLL相似,loadpackage()。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<strong>&nbsp;注意:</strong>&nbsp;编译后&nbsp; bpl 与 dcp 的文件个数是相同的,且与包项目个数一致。dcu 的数量与 代码文件(pas)相同。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dpk(相随 .dproj): 组件包项目文件,它是由多个组件(PAS)集合而成的。它是Delphi&nbsp;IDE集成开发环境需要的,编译产生 BPL文件。bpl要先生创建dpk工程。当在 delphi&nbsp;里编译一个 dpk 文件,生成 bpl 的同时,也会生成 dcp 文件。 dcp 文件相当于 c&nbsp;语言里的 .h 头文件,当需要引用编译后的包(没有源代码)的时候,可能就需要引入 dcp文件。</p>
<p>&nbsp;</p>
<p>3、菜单 Component 下可以 安装 Install Component 组件 或 Packages 包 :</p>
<p>&nbsp; &nbsp; &nbsp;Install&nbsp;&nbsp;Component&nbsp; : 安装 unit (文件) 进入新包或者己存在包。先选择 unit ,然后 选 package .</p>
<p>&nbsp; &nbsp; &nbsp;Install&nbsp;&nbsp;<strong>Packages</strong>&nbsp; &nbsp; &nbsp;:&nbsp; 选择&nbsp; .bpl 文件,必须 是 设计时包 (Design Packages),类似 “包项目文件” 上右健菜单 Install .&nbsp;</p>
<p>&nbsp;</p>
<p>4、<span class="ask-title">如何安装delphi的.dpk文件?&nbsp;&nbsp;https://zhidao.baidu.com/question/2144469763189341868.html?fr=iks&amp;word=bpl+dcu&amp;ie=gbk</span></p>
<p><span class="ask-title">&nbsp; &nbsp; &nbsp; &nbsp;</span>由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组件的安装方法介绍一下。&nbsp;</p>
<p class="15">  1. 只有一个DCU文件的组件。DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布。一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误。也正是因为没有源码,给使用者带来了不便,那就是一旦Delphi版本升级,此组件就不能再使用了,当然有的作者给出了几种版本的DCU文件,用户根据需要选择使用。这样的组件的安装方法是:在Component菜单中,选择install component,在对话框中的"into existing package"页中,单击“Unit file name”后的“Browse”按钮,在打开的文件对话框中,将“文件类型”设定为*.dcu,找到要安装的DCU文件,按OK按钮返回"into existing package"页后再按OK按钮就可以安装了。注意,此时Delphi会提示dclusr40.dpk将被重建,是否继续,OK就可以了。这里是将组件安装到dclusr40.dpk包中,此包从文件名上可以看出是用户自定义组件包,先安装到这个包中吧,下面再讲有关注意事项。安装完毕会有已经将组件注册完的提示信息以及安装到哪个组件页中的信息等,到组件面板上看看,一般会出现一个新的组件页,其中有刚安装的组件。&nbsp;</p>
<p class="15">  2、只有PAS文件或既有PAS又有DCU文件的组件。这种组件因为有PAS文件,也就是说作者提供了源码,这就好办多了。安装的方法和上面是一样的,在文件类型中可以设定为DCU也可以设定为PAS,建议设定为PAS,这样可用你的Delphi重新编译一下,看是否会出现问题。Delphi升级后只能选择PAS文件安装,这样才能重新编译,使得组件能适应新Delphi版本。这样的组件是很值得使用的,根据心铃的经验,没有源码的组件最好不要使用,一是存在Delphi版本升级后无法使用的问题,再者当程序出现问题后用户无法调试组件来判断是否是组件中存在BUG。&nbsp;</p>
<p class="15">  3、有dpk文件的组件包。带有dpk文件的组件包一般是有多个组件构成的,也就是说安装后会有多个组件供使用,如果只有一个组件作者一般不会制成DPK文件,使用上面的方式发布就可以了。对于这样的组件包,一般来说会有详细的安装说明文件,如上面提到的RXLIB,由于组件复杂且安装时有先后顺序,作者不提供安装说明用户根本无法正确安装。如果没有安装说明文件,那么用下面的方法安装:在File菜单下,选择”OPEN…”打开dpk文件(文件类型列表框中选*.dpk),在出现的Package窗口中,工具栏上有Install按钮,按此按钮即可进行安装。如果Install按钮处于无效状态,那么先按Compile按钮编译,一般来说编译之后Install按钮就会处于有效状态,此时再按Install按钮就可以了。&nbsp;</p>
<p class="15">  4、带有Bpl文件的组件包。一般来说这也是由多种组件构成的组件包,它其实是一个动态连接库文件(DLL)。对于这种组件包的安装方法是:在component菜单下选择“install packages”,然后单击Add按钮,在打开的文件对话框中找到相应的bpl文件打开返回后,再单击Ok按钮就可以了。&nbsp;</p>
<p class="15">  5、ActiveX控件的安装。要安装这类控件,需要先用regsvr32.exe注册,然后选择Component菜单中Import ActiveX Control项。在Import ActiveX Control打开的窗口中,只有已经注册的ActiveX控件才出现在列表中,选中一个然后按Install按钮就可以安装了。&nbsp;</p>
<p class="15">  如果事先没有用regsvr32.exe注册也可以按ADD按钮找到OCX文件即时注册,注册后再进行安装。&nbsp;</p>
<p class="15">  <strong>几点说明</strong>:</p>
<p class="15">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 在拿到组件后先看是否有说明文件,一般来说在说明文件中有如何安装的指导,有些还会有组件的属性、事件、方法的使用说明,这些在使用时是非常重要的。&nbsp;</p>
<p class="15">  &nbsp; &nbsp;&nbsp;2 在上面的组件(包)安装操作之前,最好将 *.bpl拷贝到你的System目录中,将*.pas、*.dcu、*.dcr、*.dp?拷贝到Delphi的Lib目录中再进行。</p>
<p class="15">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 前面我们提到安装DCU组件时,选用的是已经存在的dclusr40.dpk,当然也可以选择安装到一个新的包中,如果选择新包,需要先取一个名字比如DEMO,事实上安装完毕后用户可以找到的是Demo.bpl,而找不到DEMO.DPK。假如你已经将一个组件安装到dclusr40.dpk中了,还想再安装一个组件,如果再安装到dclusr40.dpk中,安装后你得到提示,原来安装的那个组件已经被取消注册,你将无法使用了。这样不就成了只能安装一个组件了吗?除非你再安装到一个新的包中才可以两个组件同时使用。当然每安装一个组件生成一个新的BPL文件也未偿不可,但BPL文件就增加许多。能否在dclusr40.dpk中多安装几个组件呢?当然是可以的。方法如下:用File菜单下的OPEN打开dclusr40.dpk文件,单击ADD按钮,在打开的对话框中选择ADD UNIT页面,按Unit file name后“Browse”按钮打开组件单元文件,OK即可,用此种方法这样可添加多个组件的单元文件,添加完毕,按一下编译按钮,然后再按Install按钮即可,如果单元文件是编译好的(DCU)可以直接按安装按钮。</p>
<p class="15">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4 组件的删除。光会安装可不行,还要会删除呀。很简单,在component菜单下,选择install packages,在列表中找到安装所在的Bpl,按Remove按钮,ok!再把Bpl文件删掉就彻底了,如果不删除BPL文件,下次可以按安装BPL组件的方法再安装使用。</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/17937387</p><br><br>
来源:https://www.cnblogs.com/del88/p/17937387
頁: [1]
查看完整版本: delphi的bpl、dcp 、dcu