找不到Delphi DFM

nar*_*ren 5 delphi dfm

我在我的项目中有一个xyz.pas文件引用.但那个档案不适合我.我有该xyz.pas文件的xyz.dcu和xyz.obj文件.当我尝试编译项目时,我得到错误"找不到xyz.dcu".所以我在搜索路径中包含了xyz.dcu的路径.现在我收到错误"找不到xyz.dfm".

请建议我的解决方案.是否可以仅使用.dcu和.obj文件编译项目?

提前致谢.问候,纳伦

the*_*ght 5

我希望你没有丢失你的工作.

简化,Delphi的工作原理如下:
PAS + DFM => DCU
DCU + RES => EXE
在本答案结尾处有关于Delphi文件的更多信息.

如果您只有DCU文件,则可以编译项目.首先,从您的文件夹中删除PAS文件,否则Delphi将尝试重新编译它(为了重新编译它,它需要DFM文件).
我不认为Obj文件会对你有用.


DFM文件对您的项目非常重要,但并不重要.如果您非常需要,您仍然可以继续使用它,因为它可以根据您在PAS文件中的信息并基于应用程序GUI的外观(如果您已经看过它运行)手动重建.

这是诀窍(涉及一些工作):

只需创建一个新表单,然后查看原始PAS文件的顶部以获取表单声明.它可能看起来像这样:

TYPE
  TYourForm = class(TForm)
     xLabel: TLabel;
     yButton: TButton;
     etc
     etc
  end;
Run Code Online (Sandbox Code Playgroud)

然后将所有这些控件放回到新表单中,并将它们命名为在PAS文件(xLabel,yButton等)中命名.安排它们类似于原始GUI.完成后,将新创建的PAS文件替换为原始PAS文件.重要信息:DFM和PAS文件的名称应匹配.编译,你就完成了!重建的GUI可能看起来不像原始GUI,但它应该这样做.

提示:
有些工具可以从DCU/EXE中提取DFM文件.
以下是其中一些:www.delphi2.software.informer.com/download-delphi-extract-dfm
这将对您有所帮助!


.PAS - Delphi源文件
PAS应存储在源代码控制中
在Delphi中,PAS文件始终是单元或表单的源代码.单元源文件包含应用程序中的大部分代码.该单元包含附加到表单事件或其包含的组件的任何事件处理程序的源代码.我们可以使用Delphi的代码编辑器编辑.pas文件.不要删除.pas文件.

.DCU - Delphi编译单元
编译单元(.pas)文件.默认情况下,每个单元的编译版本存储在一个单独的二进制格式文件中,该文件与单元文件同名,但扩展名为.DCU(Delphi编译单元).例如,unit1.dcu包含unit1.pas文件中声明的代码和数据.重建项目时,除非自上次编译后源(.PAS)文件发生更改,否则不会重新编译单个单元,或者找不到它们的.DCU文件.安全删除.dcu文件,因为Delphi在编译应用程序时会重新创建它.

.DFM - Delphi表单
DFM应存储在源代码管理中
这些文件始终与.pas文件配对.Dfm文件包含表单中包含的对象的详细信息(属性).通过右键单击表单并从弹出菜单中选择视图作为文本,可以将其视为文本.Delphi将.dfm文件中的信息复制到完成的.exe代码文件中.在更改此文件时应谨慎使用,因为对它的更改可能会阻止IDE加载表单.表单文件可以二进制或文本格式保存."环境选项"对话框允许您指定要用于新创建的表单的格式.不要删除.dfm文件.

来源:delphi.about.com/od/beginners/a/aa032800a.htm

  • DFM不包含在DCU中.DFM本质上是特殊的*.RES文件.如果您没有DFM文件,则无法使用DCU进行编译. (5认同)
  • `如果你只有DCU文件,你可以编译项目.这只有在你使用与原始.dcu创建的完全相同版本的Delphi时才是正确的(注意**强调**)**).否则,您必须重新编译.pas文件以用于不同版本的Delphi. (2认同)

And*_*eas 1

DFM 文件保存(例如)表单的“视觉”方面(控件、组件、属性、视觉效果、数据...)。如果 PAS 文件(或编译后的 DCU 文件)需要 DFM,则必须拥有它,否则会出现此错误。我认为除了 DFM 之外别无他法。

更正(如下所述,抱歉!):如果删除 PAS 文件并仅提供 DCU 文件,则可以使用DCU 文件进行编译。在这种情况下,DCU 文件必须使用相同的编译器版本进行编译才能链接到应用程序中,因为编译器无法重新编译 DCU。