是否可以这样做:(出于教育目的)。
假设我有一个图像文件“image.jpg”
我想在执行时创建一个程序,它应该创建这个图像。这意味着图像的数据存储在 exe 中。这可能吗?
像这样:从 resource.rc 链接图像文件,然后告诉编译器获取数据并存储它(这样的事情,unsigned char data_buffer[]="binary data of the image"
然后当程序执行时,我可以将此数据写入文件)
(我使用 C++ 和 mingw 编译器)
非常感谢任何帮助。
有几种选择:
1)将其作为字节数组添加到源文件中。编写一个从文件中读取字节并写入 C 源代码的辅助程序是微不足道的。例如:
unsigned char data_jpg[] = {1,2,3... };
extern char data_jpg[];
const size_t data_jpg_size = 1000;
2)将其作为二进制资源添加到可执行文件中。你说的是“exe”,是吗?所以你很可能在 Windows 上。Window EXE 文件可以有二进制资源,可以使用资源 API 来定位。请参阅FindResource
和LoadResource
函数GlobalLock
。
ID_DATA_JPG FILE "data.jpg"
3) 将二进制文件直接转换成OBJ文件并链接到可执行文件中。在过去,turbo-c 曾经是一个 BINOBJ 工具。GNU 工具可以做到这一点,AFAIk,但使用 MS 工具,我真的无法判断。
使用 PE 文件,您可以将数据(包括 bin 数据)作为资源添加到 PE 文件的尾部。您只需要记住 PE 文件的大小。但我不确定您是否需要更改 PE 的校验和。并且使用 VC++ Compiler 来嵌入资源会非常容易。