来自.NET背景,现在使用Delphi。在.NET中,我曾经有一个单独的库项目,其中许多类被分离到不同的文件中。当我编译这个项目时,我得到了一个DLL文件。
但是,我不能在Delphi中做到这一点。我有许多类,每个类都在它们自己的文件中,有自己的单元名称(我没有找到一种方法让多个文件具有相同的单元名称)。当我编译我的项目时,我有一个DCU文件(我相信这相当于一个.NET DLL?)对于我的项目中的每个单元。
问题是我不想有那么多的文件!我希望我的所有类在不同的单元中只有一个DCU文件。有没有办法实现我想做的事?您如何处理这些DCU?
发布于 2012-11-09 04:49:50
.DCU (Delphi编译单元)文件是在编译源(文本)和链接可执行文件之间使用的二进制文件。它们由编译器创建,在内存中连接在一起,与启动代码组合在一起,并由链接器放入实际的可执行文件(.EXE/.DLL/.BPL)中。
.DCU文件不是.DLL (动态链接库)文件,尽管Delphi可以组合一个或多个.dcu文件并链接到.DLL。
在大多数情况下,.dcu文件的数量是没有意义的;它是您需要关注的.pas源文件,并且您创建的每个源单元都有一个这样的源文件。如果源文件改变了,它们会根据需要重新创建,或者如果源文件没有改变链接速度,它们就会在编译状态下使用。在uses子句中,每个.pas文件总是有一个.dcu文件,另外还有一个用于正在编译的您自己的源代码。
当您将组件安装到集成开发环境的组件面板中时,.dcu被放置在.BPL (Borland package Library)中,这是一种特殊类型的DLL;然后,该BPL或包文件作为执行代码加载到集成开发环境中。这就是按钮在设计时在窗体上可视化显示的方式;在BPL中执行的代码实际上创建了一个按钮,并允许在form Editor中显示和操作它。
在构建可执行文件(并且不使用运行时包)时,DCU文件将链接到应用程序中,一旦创建了可执行文件(.EXE),就不再需要原始的.pas文件或.dcu。(直到您需要对可执行文件进行更改,在这种情况下,.pas文件被修改,编译器创建一个新的.dcu,然后链接器将它们组合起来创建一个新的.exe。)
发布于 2012-11-09 08:23:59
.DCU文件是开发过程中使用的中间文件。
最终的可执行.EXE文件不附带.DCU文件
是的,用Delphi构建一个.DLL并让一个(Delphi制造的) .EXE使用它是可能的。如果遵循某些约定,常规的C/C++ .EXE也可以使用Delphi .DLL。
如果您想将一个过程/类的集合发布到一个库中,可以创建一个.DLL或(更适合于Delphi语言的) .BPL。
每次修改和重新编译.PAS文件时,它对应的.DCU文件也会重新编译。
在某些开发环境中,当开发人员不想公开源代码时,会将.DCU文件而不是源.PAS文件提供给开发人员。
https://stackoverflow.com/questions/13297234
复制相似问题