在单个DCU中编译多个单元

时间:2012-11-08 20:26:57

标签: delphi dll dcu

来自.NET背景,现在正在使用Delphi。在.NET中,我曾经有一个单独的库项目,其中许多类分隔成不同的文件。当我编译这个项目时,我得到了一个DLL文件。

但是,我无法在Delphi中这样做。我有很多类,每个类都在自己的文件中,并且有自己的单元名称(我没有找到一种方法来拥有多个具有相同单元名称的文件)。当我编译我的项目时,我的项目中的每个单元都有一个DCU文件(我相信这相当于一个.NET DLL?)。

问题在于我不想拥有那么多文件!我想只有一个DCU文件用于我所有不同单元的类。有没有办法实现我想做的事情?你如何处理这些DCU?

1 个答案:

答案 0 :(得分:14)

.DCU(Delphi编译单元)文件是在编译源(文本)和链接可执行文件之间使用的二进制文件。它们由编译器创建,在内存中连接在一起,与启动代码结合并由链接器放入实际的可执行文件(.EXE / .DLL / .BPL)。

.DCU文件不是.DLL(动态链接库)文件,但Delphi可以将一个或多个.dcu文件和链接组合到.DLL

.dcu个文件的数量在大多数情况下毫无意义;它是您需要关注的.pas源文件,并且您创建的每个源单元都有一个。如果源文件已更改,则会根据需要重新创建它们,或者如果源的链接速度未更改,则在编译状态下使用它们。在uses子句中,每个.dcu文件总是有一个.pas文件,另外还有一个用于编译自己的源文件。

当您在IDE中的Component Palette中安装组件时,.dcu会放在.BPL(Borland包库)中,这是一种特殊类型的DLL;然后将BPL或包文件作为执行代码加载到IDE中。这是在设计时在窗体上可视地显示按钮的方式;在BPL中执行的代码实际上创建了一个按钮,允许它在表单编辑器中显示和操作。

当您构建可执行文件(并且不使用运行时包)时,DCU文件将链接到您的应用程序,并且一旦创建可执行文件(.EXE)文件,原始.pas文件或{不再需要{1}}。 (直到,也就是说,您需要对可执行文件进行更改,在这种情况下修改.dcu文件,编译器会创建一个新的.pas,并且链接器将它们组合在一起以创建新的.exe文件。 。)