2010-03-04 74 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加载数据。你显然会将这些数据写入临时文件并执行该文件。