是否可以在exe中存储二进制文件

时间:2012-12-01 15:28:37

标签: c++ file

是否可以这样做:(用于教育目的)。

假设我有一个图像文件“image.jpg”
我想在执行它时创建一个程序应该创建这个图像。这意味着图像的数据存储在exe中。这可能吗?

这样的事情:从resource.rc链接图像文件,然后告诉编译器获取数据并存储它(类似于unsigned char data_buffer[]="binary data of the image",然后当程序执行时我可以将这些数据写入文件)

(我正在使用C ++和mingw编译器)

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

有几种选择:

1)将其作为字节数组添加到源文件中。编写一个从文件中读取字节并写入C源的辅助程序是微不足道的。 E.g:

data_jpg.c:

unsigned char data_jpg[] = {1,2,3... };

data_jpg.h:

extern char data_jpg[];
const size_t data_jpg_size = 1000;

2)将其作为二进制资源添加到可执行文件中。你说“exe”,是吗?所以你很可能在Windows上。 Window EXE文件可以具有二进制资源,可以使用资源API定位。请参阅FindResourceLoadResourceGlobalLock,函数。

RESOURCE.RC

ID_DATA_JPG FILE "data.jpg"

3)将二进制文件直接转换为OBJ文件并将其链接到可执行文件中。在turbo-c的旧时代曾经是BINOBJ工具。 GNU工具可以做到这一点,AFAIk,但是使用MS工具,我实在说不出来。

答案 1 :(得分:1)

使用PE文件,您可以将数据(包括bin数据)添加到PE文件的尾部作为资源。你只记得PE文件的大小。但我不确定你是否需要改变PE的校验和。使用VC ++ Compiler嵌入资源非常容易。