2011-06-01 130 views
5

我在我的項目中有一個xyz.pas文件參考。但那個文件不在我身邊。我有xyz.pas文件的xyz.dcu和xyz.obj文件。 當我試圖編譯項目時,我得到了錯誤「xyz.dcu未找到」。所以我在搜索路徑中包含了xyz.dcu的路徑。現在我收到錯誤「xyz.dfm not found」。德爾福DFM找不到

請給我解決方案。是否有可能編譯只有.dcu和.obj文件的項目?

在此先感謝。 Regards, Naren

回答

1

DFM文件包含(說)形式的「視覺」方面(控件,組件,屬性,視覺效果,數據...)。如果PAS文件(或編譯的DCU文件)需要DFM,則必須擁有它,否則會出現此錯誤。我認爲沒有別的辦法可以擁有DFM。

校正(如下面寫的,對不起!):你可以僅DCU-文件編譯如果刪除了PAS-文件,並提供ONLY的DCU-文件。在這種情況下,必須使用相同的編譯器版本編譯DCU文件以鏈接到應用程序,因爲編譯器無法重新編譯DCU。

+0

確定。謝謝安德烈亞斯。 – naren 2011-06-01 11:16:58

5

我希望你沒有失去你的工作。

簡體,德爾福是這樣的:
PAS DFM + => DCU
DCU + RES => EXE
更多關於德爾福文件,在這個答案的末尾。

如果您只有DCU文件,則可以編譯該項目。首先,從您的文件夾中刪除PAS文件,否則Delphi將嘗試重新編譯它(並且爲了重新編譯它,它需要DFM文件)。
我不認爲這個Obj文件對您有任何用處。


DFM文件對於您的項目非常重要,但並不重要。如果您需要的很深,仍然可以繼續使用,因爲它可以根據您在PAS文件中的信息以及應用程序GUI的外觀(如果您曾經看到它運行過)的方式進行手動重建。

這是使用方法(包括一些工作):

只需創建一個新的表格,然後看看你的原始PAS文件的頂部爲形式的聲明。它可能看起來像這樣:

TYPE 
    TYourForm = class(TForm) 
    xLabel: TLabel; 
    yButton: TButton; 
    etc 
    etc 
    end; 

然後把所有這些控件返回到您的新的形式和叫不出名兒,因爲他們在PAS文件命名(xLabel,yButton等)。安排他們類似於原始的GUI。完成後,將新創建的PAS文件替換爲原始的PAS文件。重要提示:DFM和PAS文件的名稱應該匹配。編譯,你就完成了!重建的圖形用戶界面可能看起來不像原來的,但它應該做到這一點。

提示:
有一些工具可以從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

+0

您好,非常感謝您的幫助。你給我一些建設這個項目的希望。有人從我的項目中刪除了xyz.pas和xyz.dfm文件。現在我只有xyz.dcu的副本。現在,因爲沒有xyz.pas,爲什麼我得到錯誤「xyz.dfm not found」?請提出解決方案來編譯該項目。再次感謝。 ---那仁 – naren 2011-06-01 12:13:29

+2

'你可以編譯項目,如果你只有DCU file.'This是唯一正確的,如果你正在使用** **完全一樣德爾福原來.dcu與創建的版本(注意強調**精確**)。否則,你必須讓.pas文件重新編譯爲不同版本的Delphi。 – 2011-06-01 12:47:51

+4

DFM不包含在DCU中。 DFM本質上是特殊的* .RES文件。如果您沒有DFM文件,則無法使用DCU進行編譯。 – 2011-06-01 17:01:34

3

如果你仍然在可執行的聚魔櫃,那麼你可以從應用程序資源中提取的完整和原始的DFM文件由任何任意的資源管理器。例如:XN Resource Editor。在RC DATA類別中,將會有一個名爲TXYZ的項目。

+0

嗨,謝謝。我只想成功編譯項目。是否有可能只用dcu文件編譯? --- Naren – naren 2011-06-01 12:15:48

+0

我剛試過,但沒有奏效。也許這隻有在dfm被存儲爲二進制時纔有效。但是:你有(舊)可執行文件嗎? – NGLN 2011-06-01 12:20:33

+0

不幸的是我沒有舊的exe也。 :( – naren 2011-06-01 12:26:24

2

德爾福20XX/XE
需要注意的是德爾福保存您的舊版本文件在您的項目目錄的子目錄隱藏叫__history

在該目錄中保存了.pas,.dfm和其他項目文件的版本。
每次將更改保存到磁盤時都會創建這些文件。

在您的硬盤上搜索名爲*.~*~的所有文件(包括隱藏文件),這應該會顯示您可能擁有的任何備份源文件。
他們會錯過您所做的最後更改,但至少您不必再重複一遍。

德爾福7和
德爾福7保存在同一目錄將這些文件作爲一個.~擴展項目文件。

0

這是相當晚,但這是我帶來的。

我的目錄stucture是這樣

/ Project 
/Source 
    /Unit1.pas 
/Packages 
    /Delphi2010Berlin 
    /MyPackage1.dpk 
    /MyPackage2.dpk 
/Library 
    /Delphi2010Berlin 
    /Win32 
     /Debug 
     /Release 

在/項目文件夾中,我創建了一個名爲.bat文件 'dfmcopy.bat'

它包含所有的

@echo off 
for /r %1 %%x in (*.dfm) do @copy "%%x" %2 /Y >NUL 

然後,在我的後生成事件對我.bpl

./../../dfmcopy.bat $(PROJECTPATH)\..\..\Source $(PROJECTPATH)\..\..\Library\$(Platform)\$(Config) 

這將遞歸複製包含在/ Source文件夾到/庫/ {} DelphiVersion所有.DFM/{平臺}/{}配置文件夾

一個需要注意的是,如果你有一個有這樣的多個項目發佈後生成事件,dfms可能會被複制到每個項目中。不知道現在是否會造成任何問題。