2

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

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

问题是我不想拥有那么多文件!我希望我的所有课程都在不同的单元中只有一个 DCU 文件。有没有办法实现我想做的事情?您如何处理这些 DCU?

4

2 回答 2

14

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

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

大多数时候文件的数量.dcu是没有意义的;这是您需要关注的 .pas 源文件,您创建的每个源单元都有一个。如果源文件发生更改,它们将根据需要重新创建,或者如果源文件未更改链接速度,则在其编译状态下使用它们。.dcu在你的uses 子句中,每个文件总是有一个文件.pas,另外还有一个文件用于编译你自己的源代码。

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

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

于 2012-11-08T20:49:50.033 回答
2

.DCU 文件是在开发过程中使用的中间文件。

.DCU 文件未随最终可执行 .EXE 文件一起提供

是的,它可以用 Delphi 构建一个 .DLL 并让一个(Delphi 制造的).EXE 使用它。如果遵循某些约定,常规的 C/C++ .EXE 也可以使用 Delphi .DLL。

如果您想将一组过程/类发送到库中,可以制作 .DLL 或(更接近 Delphi 原生的).BPL。

每次修改和重新编译 .PAS 文件时,它对应的 .DCU 文件也会重新生成。

在某些开发环境中,当开发人员不想公开源代码时,会向开发人员提供 .DCU 文件而不是源 .PAS 文件。

于 2012-11-09T00:23:58.673 回答