2012-11-08 32 views
2

來自.NET背景,現在正與Delphi合作。在.NET中,我曾經有一個獨立的庫項目,其中有許多類被分離成不同的文件。當我編譯這個項目時,我得到了一個DLL文件。在單個DCU中編譯多個單元

但是,我不能在Delphi中做到這一點。我有很多類,每個都有自己的文件和自己的單元名稱(我沒有找到一種方法來使用相同單元名稱的多個文件)。當我編譯我的項目時,我的項目中的每個單元都有一個DCU文件(我相信這相當於一個.NET DLL?)。

問題是我不想擁有那麼多文件!我想只有一個DCU文件適用於所有不同單位的類。有沒有辦法實現我想要做的事情?你如何處理這些DCU?

+0

不介意dcus。將鼠標懸停在您的問題上的「dcu」標籤上,以查明它是什麼。 –

+0

所以你說這些文件是無用的?當我想在另一個項目中使用我的自定義組件時會發生什麼?我以爲我需要那個dcu文件。 –

+0

它們不是無用的,編譯器需要/產生它們。您將組件安裝到*包*([link](http://docwiki.embarcadero.com/RADStudio/XE3/en/Introduction_to_component_creation_Index))。 –

回答

14

.DCU(Delphi編譯的單元)文件是在編譯源文件和鏈接可執行文件之間使用的二進制文件。它們由編譯器創建,在內存中結合在一起,並與啓動代碼結合,並由鏈接器放入實際的可執行文件(.EXE/.DLL/.BPL)中。

.DCU文件不是.DLL(動態鏈接庫)文件,儘管Delphi可以將一個或多個.dcu文件和鏈接組合到一個.DLL

大多數時候.dcu文件的數量是毫無意義的;它是您需要關注的.pas源文件,並且您創建的每個源單位都有一個。如果源文件發生更改,則會根據需要重新創建它們,或者如果源未針對鏈接速度更改,則會在編譯狀態下使用它們。在您的使用條款中,每.pas文件總是會有一個.dcu文件,另外還有一個用於編譯自己的源文件。

當您將組件安裝到IDE中的組件面板中時,.dcu被放置在.BPL(Borland Package Library)中,該DLL是一種特殊類型的DLL;然後將BPL或包文件作爲執行代碼加載到IDE中。這是按鈕在設計時是如何在窗體上直觀顯示的;在BPL中執行的代碼實際上創建了一個按鈕,並允許它在Form Editor中顯示和操作。

當你建立一個可執行文件(而不要使用運行時包)中,DCU文件鏈接到您的應用程序,並且一旦創建可執行文件(.exe)文件既不需要任何原始.pas文件或.dcu更長的時間。 (直到,也就是說,您需要對可執行文件進行更改,在這種情況下.pas文件被修改,編譯器會創建一個新的.dcu,並且鏈接器會將它們組合起來以創建一個新的.exe文件。)

+0

好吧,所以我想我會和它一起生活,並忽略這些文件。 –

+0

如果您購買沒有源代碼的第三方組件,您通常會得到dcu文件。請記住,它們通常在編譯器版本中沒有用處,因此從來不會陷入這種情況。 –

+0

如果你有源代碼,你不需要檢查你的.DCU文件到SVN中,BTW。只需檢查中的源文件;將它們檢出並重新編譯它們將再次創建.DCU,並且版本化文本源文件更容易(並且在回購中佔用更少的空間)。如果您還將.dpr和.dproj文件保存在SVN中,它將存儲編譯器設置,以便可以使用完全相同的設置重新生成.dcu文件。如果您的第三方組件不含源代碼,則必須保存DCU,但不應允許這樣做,正如@LURD在他上面的評論中所述。 –

2

.DCU文件是在開發過程中使用的中間文件。

.DCU文件不會隨最終的可執行.EXE文件

是的,它的更多鈔票,以建立與德爾福一個.DLL,並作出(德爾福製造).EXE使用它。如果遵循某些約定,則常規C/C++ .EXE也可以使用Delphi .DLL。

如果您想將一組程序/類發佈到庫中,可以創建.DLL或(更多Delphi本機).BPL。

每次.PAS文件被修改並重新編譯時,它都是相應的.DCU文件也將被重建。

在某些開發環境中,。DCU文件提供給開發人員而不是源.PAS文件,當他們不想查看源代碼時。

相關問題