我写了一个c++程序,我想在里面执行我的第二个程序,这是一个exe文件。问题是我想把我的程序作为一个单独的文件分享给别人。
当我在网上搜索时,我发现了这个解决方案。
只要在编译时用一个.rc文件把第二个.exe文件作为二进制资源存储在主.exe里面。在运行时,你可以使用
FindResource()
,LoadResource()
和LockResource()
然后把它写到磁盘上的一个临时文件中,再传给system()
.
但我不明白如何 "将.exe文件存储为二进制资源"
我现在使用的是 CreateProcess()
启动我的第二个程序,这工作很大.任何人都可以为我写一些例子吗?
在你的项目的资源脚本中(在 .rc
文件中定义了图标、对话框等),你可以用下面的行添加一个二进制资源。
IDB_EMBEDEXE BINARY "<path>\\EmbedProgram.exe"
其中的 IDB_EMBEDEXE
tokenmacro应该在头文件中定义,并由 两者 该资源脚本 和 任何使用它的C++源码;这将是使用它的 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"
指定的可执行文件将被完全嵌入(作为二进制)资源在你的 建成 可执行文件,并且可以按照你所引用的文章中的描述提取、写入磁盘并执行。