2013-05-03 32 views
2

我有關於在德爾福使用* .RES文件的問題。德爾福添加和使用多個資源文件* .RES裏面的EXE/DLL

例如我有兩個資源文件:1.RES和2.RES。這兩個RES文件都包含名爲IMAGE1(jpg)的不同圖像。

我RES文件添加到使用這些命令Delphi應用程序:

{$R '1.RES'} 
{$R '2.RES'} 

如何指定要使用的資源文件? 我使用這些命令時,我想,如果我只有一個RES文件檢索圖像:

var RS : TResourceStream; 
    jpg : TjpegImage; 

RS := TResourceStream.Create(HInstance,'IMAGE1',RT_RCDATA); 
jpg.LoadFromStream(RS); 

現在,我怎麼能知道,如果我有2個文件RES會有什麼加載它? 我想我需要控制HInstance但我無法掌握如何。

+0

因爲你用'exe'和'dll'標籤標記了你的問題,我假設你有一個資源在exe和其他在dll中?在那種情況下,模塊的「HInstance」就是「答案」。 – ain 2013-05-03 20:17:10

+0

@ain兩個相鄰的'$ R'語句表示否則 – 2013-05-03 20:50:59

+1

在這種情況下,鏈接器傳遞是否應該產生關於「重複資源」的錯誤消息? – OnTheFly 2013-05-04 08:12:08

回答

5

給定模塊中資源的名稱必須是唯一的,就像函數中的變量必須具有唯一名稱一樣,目錄中的文件必須具有唯一名稱,等等。因此,如果您將兩個具有相同名稱的資源放入同一個模塊,則會丟棄一個資源,並且只能檢索剩餘的資源。

如果您不清楚模塊是什麼,我會盡力解釋。一個模塊是一個DLL或一個可執行文件,或者一個Delphi包。您的可執行文件是單個模塊,只有一個實例句柄。它鏈接到DLL,每個DLL都是獨立的不同模塊。任何可執行文件加載的軟件包都是不同的模塊。您可以在與可執行文件中的資源名稱相同的其他模塊中擁有資源。

我想我需要控制HInstance但我只是無法掌握如何。

這不能幫助,因爲我希望你現在明白了。值HInstance標識模塊,並在您的代碼中指向與可執行文件關聯的模塊。

您的選擇:

  1. 提供的資源不同的名稱。
  2. 將資源放入不同的模塊。
+0

所以我必須製造更多的dll。感謝您的快速回答:) – 2013-05-03 20:15:35

+1

或使用不同的名稱。這就是我會做的。 – 2013-05-03 20:21:12