2010-03-04 65 views
3

我用Visual C++ 2008打包文件,我已經想出瞭如何嵌入它們,但我無法弄清楚如何檢索它們。我有一些C++的經驗,但沒有與Win32或Visual C++。包裝的目標是運行一些代碼,然後如果一切正常,它可以運行嵌入式文件。從exe中檢索資源文​​件

我打包了很多不同的文件,因此重用代碼是關鍵,並且在所有情況下我都不知道嵌入文件的名稱。但是我可以將exe文件命名爲與包裝文件相同的名稱,所以如果程序可以獲取自己的名字也可以。

一些包裝文件將是exes,而其他文件將是由外部程序運行的文件。

編輯:這些文件正在嵌入一個.res文件,它們不只是連接到exe的結尾。

回答

5

因此,您在EXE中嵌入了一個二進制文件作爲資源,並且您想要讀取該文件?

嘗試是這樣的(很粗糙,查找功能MSDN上進行適當的參數):

HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(id), type); 
HGLOBAL hGlobal = LoadResource(NULL, hResource); 
BYTE* pData = (BYTE*)LockResource(hGlobal); 
int size = SizeofResource(NULL, hResource); 
// ... do something with pData and size, eg write to disk ... 
FreeResource(hGlobal); // done with data 

你要添加一些錯誤檢查到!

+1

您可能想要修復您的變量用法。 theResource-> hResource,theData-> hGlobal ... – Bahbar 2010-03-04 15:29:22

+0

糟糕,多數民衆贊成在複製粘貼另一個應用程序太快。已修復... – AshleysBrain 2010-03-04 15:31:30

+0

對於第一行,我將id設置爲「test.exe」,類型爲RT_RCDATA。它編譯,但根據調試器hResource爲空。我不知道什麼是錯的... – jonescb 2010-03-04 16:22:30

0

您需要知道的主要內容(應該出現在編譯爲.res文件的.RC文件中)是資源的名稱。由此,您可以使用FindResourceLoadResource加載數據。你顯然會將這些數據寫入臨時文件並執行該文件。