什么是Delphi DCU文件?
我相信它代表"Delphi Compiled Unit".假设它包含目标代码,我是否正确,因此对应于从C/C++源代码文件编译的".o"文件?
如果我有一些.dcu文件; 我怎样才能找出他们编译的Delphi版本?
我收到了一些旧的源代码,包含了一些.dcu文件,我无法访问原始源代码.我想重构这个库,但为此我想让它首先在原始的Delphi版本中进行编译.
顺便说一句,编译器在这里可能会更有帮助.它声明文件X是用"不同"版本编译的,没有说 - 是 - 版本是....
目前我还没有在我的主项目中为Delphi DCU设置任何特定的输出目录.这导致DCU文件最终与我的.pas源文件位于同一目录中.对我来说,这感觉很难看,因为我不喜欢将.pas和.dcu文件混合在同一目录中.存储Delphi .dcu文件的最佳实践是什么 - 将它们保存在每个项目的一个目录中?或者也许为每个源文件夹创建一个DCU目录?欢迎任何想法.
调试器在错误的源代码中步入(如同F7),但我想恢复正常工作模式,其中Delphi基本DCU(库)只编译到我的代码中,并且源不用于调试.
例如,在我的程序中出现错误时,调试器正在进入Controls.pas,进入TControl.Click.正常情况(安装后)是Delphi跨越这些方法的.
我应该在没有调试信息的情况下重新编译Controls.pas吗?如果是这样,怎么样?
我通过附加信息扩展这个主题,以便更好地理解:
我们使用Delphi6 Prof. Mouse有什么问题(系统错误代码5).因此,我们要重新编译为Controls.pas以替换Mouse Position getter代码.然后:
通过这些步骤,我可以使用鼠标安全代码编译源代码.
好的,但随后德尔福每次都会在F7上进入Controls.pas,并且在任何例外情况下 - 这都是非常"愤怒"的事情.
无论我从库路径中删除了"Controls.pas" - 然后调试器为它找到原始的"Controls.pas",然后打开它...... :-(
我们不在任何代码中使用"Use Debug DCU-s".
我试图从编译器选项中删除"Debug Information",但不管怎么说,Delphi打开原来的Controls.pas ...
所以我搜索到Delphi的方式不要进入"Controls.pas",但是使用我的dcu ......
我希望这能为解决问题提供更好的背景.
编译我的Delphi代码时遇到问题.我有3个类,XmlFileManager(具体),XmlNodeManager(抽象),XmlEnpManager(XmlNodeManager的子项和具体).下面,一些定义类代码:
XmlFileManager
unit XmlFileManager;
interface
uses
xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
XmlNodeManager, XmlEnpManager;
type
TXmlFileManager = class
[...]
end;
[...]
end.
Run Code Online (Sandbox Code Playgroud)
XmlNodeManager
unit XmlNodeManager;
interface
uses
xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
XmlFileManager;
type
TXmlNodeManager = class
[...]
end;
[...]
end.
Run Code Online (Sandbox Code Playgroud)
XmlEnpManager
unit XmlEnpManager;
interface
uses
xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
XmlFileManager, XmlNodeManager;
type
TXmlEnpManager = class (TXmlNodeManager)
[...]
end;
[...]
end.
Run Code Online (Sandbox Code Playgroud)
在XmlNodeManager和XmlEnpManager中,无法识别TXmlFileManager类.编译时,编译失败并显示消息:
[dcc32致命错误] SiGAS.dpr(23):F1026找不到文件:'XmlManager.dcu'
过去,XmlFileManager被称为XmlManager.有任何想法吗 ?.
我的.dpr:
uses
Forms,
Main in …Run Code Online (Sandbox Code Playgroud) 我有一个BPL项目(有一些基础东西)和一个EXE项目,它在其搜索路径中有另一个项目输出的位置(BPL和DCP).当使用"Build With Runtime Packages"构建EXE项目时,它构建正常.但是,它需要我部署EXE和BPL.到现在为止还挺好.
因为我宁愿只部署EXE(无论它变大),我猜我只是取消选中"Build With Runtime Packages"并且就是这样,但事实并非如此.它不会构建,并开始抱怨缺少的类.我可以编译EXE项目的唯一方法是将实际BPL项目的DCU路径添加到EXE项目的搜索路径中.我可以这样做,但为什么我被迫指向DCU?德尔福不能把它们从BPL中拿走吗?这不只是一个品味的问题,如果我走这条路,并链接到DCU,当谈到属于表格的DCU时,它会询问我表格DFM,迫使我也将我的来源文件夹包含在EXE中项目的搜索路径,现在它们似乎正在编译,这是令人望而却步的.每次我想编译我的EXE项目时,我都无法重新编译我的BPL项目代码库.
我希望我已经说清楚了.
如何实现标题中提出的任何帮助表示赞赏.
谢谢.
来自.NET背景,现在正在使用Delphi.在.NET中,我曾经有一个单独的库项目,其中许多类分隔成不同的文件.当我编译这个项目时,我得到了一个DLL文件.
但是,我无法在Delphi中做到这一点.我有很多类,每个类都在自己的文件中,并且有自己的单元名称(我没有找到一种方法来拥有多个具有相同单元名称的文件).当我编译我的项目时,我的项目中的每个单元都有一个DCU文件(我相信这相当于一个.NET DLL?).
问题是我不想拥有那么多文件!我想只有一个DCU文件用于我所有不同单元的类.有没有办法实现我想做的事情?你如何处理这些DCU?
我几年前完成了一个项目.现在我想改进它.因此,我安装之前在项目中使用的组件.但是,当我运行该项目时,它会出错.编译器找不到某些组件对象的dcu文件.我该如何解决?