从exe文件中检索资源文件

3
我正在使用Visual C++ 2008封装文件,已经找到了如何嵌入它们的方法,但是我无法找出如何检索它们。我有一些C++经验,但没有Win32或Visual C++经验。封装的目的是运行一些代码,然后如果一切正常,就可以运行嵌入的文件。
我正在封装许多不同的文件,因此代码重用非常关键,在所有情况下,我都不知道嵌入文件的名称。但是,我可以将exe命名为与封装的文件相同,因此,如果程序可以获取自己的名称,那也可以。
其中一些封装的文件将是exes,其他文件将是要由外部程序运行的文件。
编辑:这些文件是使用.res文件嵌入的,它们不仅仅是连接到exe的末尾。
2个回答

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
哎呀,这就是我太快地从另一个应用程序中复制粘贴的结果。已经修复了... - AshleysBrain
第一行中,我将ID设置为“test.exe”,类型为RT_RCDATA。代码已编译,但根据调试器,hResource为空。我不确定哪里出错了... - jonescb
你有检查GetLastError()吗? - AshleysBrain

0
你需要知道的主要事情是资源的名称(应该在编译为.res文件的.RC文件中存在)。从那里,你可以使用FindResourceLoadResource来加载数据。显然,你需要将这些数据写入临时文件并执行该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接