将 .exe 文件嵌入到 C++ 程序中?

Jas*_*Lam 3 c++ windows embed cygwin exe

我写了一个 c++ 程序,我想在里面执行我的第二个程序,这是一个 exe 文件。问题是我想将我的程序作为一个文件共享给其他人。

当我在互联网上搜索时,我找到了这个解决方案。

只需在编译时使用 .rc 文件将第二个 .exe 文件作为二进制资源存储在主 .exe 中。在运行时,您可以使用FindResource()LoadResource()和访问它,LockResource()然后将其写出到磁盘上的临时文件,然后再将其传递给system().

但我不明白如何“将 .exe 文件存储为二进制资源”

我目前正在使用它CreateProcess()来启动我的第二个程序,该程序运行良好。任何人都可以为我写一些例子吗?

Adr*_*ica 5

在您项目的资源脚本(.rc定义图标、对话框等的文件)中,您可以使用如下一行添加二进制资源:

IDB_EMBEDEXE    BINARY      "<path>\\EmbedProgram.exe"
Run Code Online (Sandbox Code Playgroud)

IDB_EMBEDEXE令牌/宏应在由包含一个头文件被定义该资源脚本任何C ++源极(S),其使用(一个或多个)它; 这将是lpName提供给FindResource()调用的参数,您可以使用MAKEINTRESOURCE(IDB_EMBEDEXE). 为参数指定"BINARY"(或L"BINARY"用于 Unicode 构建)lpType

像这样:

#define IDB_EMBEDEXE 13232 // Or whatever suitable value you need
//...
// In the C++ code:
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDB_EMBEDEXE), _TEXT("BINARY"));
HGLOBAL hGlobal = LoadResource(NULL, hResource);
size_t exeSiz = SizeofResource(NULL, hResource); // Size of the embedded data
void*  exeBuf = LockResource(hGlobal);           // usable pointer to that data

// You can now write the buffer to disk using "exeBuf" and "exeSiz"
Run Code Online (Sandbox Code Playgroud)

然后,指定的可执行文件将完全嵌入(作为二进制)资源在您构建的可执行文件中,并且可以按照您引用的文章中的描述提取、写入磁盘和执行。