我正在一个win32应用程序。 我目前正在使用具有制表符分隔的数据作为源的文本文件。 我想embedded这个作为一个资源,所以我不用担心运输这个文件与.exe文件一起。
谁能告诉我怎么做?
Windows二进制文件可以嵌入资源。 大多数资源是预定义的类型(例如菜单,图标或位图),但是也可以嵌入任意二进制数据(例如文本文件)。 从阅读msdn文档,正确的语法很难弄清楚。
这段代码展示了如何从文件中嵌入二进制资源。
首先,您需要在C编译器和资源编译器将使用的头文件(例如resource.h)中定义一个资源标识符:
#define MY_RESOURCE 300
然后你需要添加到你的资源文件(如resource.rc):
MY_RESOURCE RCDATA“file-with-data.txt”
最后,这是如何获得这些数据:
void WorkOnResource(void) { HGLOBAL res_handle = NULL; HRSRC资源; char * res_data; DWORD res_size; //注意:提供g_hInstance很重要,NULL可能不起作用 res = FindResource(g_hInstance,MAKEINTRESOURCE(MY_RESOURCE),RT_RCDATA); 如果(!res) 返回; res_handle = LoadResource(NULL,res); 如果(!res_handle) 返回; res_data =(char *)LockResource(res_handle); res_size = SizeofResource(NULL,res); / *您现在可以使用资源数据* / }
定义资源ID,将其添加到.rc文件中:
ID_CUSTOM1 ANYTHINGGOESHERE "filename.txt"
在运行时用这样的代码读取它:
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(ID_CUSTOM1), L"ANYTHINGGOESHERE"); HGLOBAL hMem = LoadResource(hInst, hRes); DWORD size = SizeofResource(hInst, hRes); char* resText = (char*)LockResource(hMem); char* text = (char*)malloc(size + 1); memcpy(text, resText, size); text[size] = 0; FreeResource(hMem); // use text...
为什么不使用头文件,并把所有的数据放在一个静态数组中。 这样,您不必解析文本文件或担心部署
如果你正在寻找“正确”的方法来做到这一点,那么我会建议添加你的文本文件作为资源(作为一个字符串表或二进制),并使用LoadString或FindResource来访问它。
在Visual Studio中,您可以像其他任何资源一样将文本添加为资源。
在你的项目的resource.rc文件中:
IDR_MYRESOURCE MYCUSTOMRESOURCETYPE "path_to_file.txt"
在resource.h文件中:
#define IDR_MYRESOURCE 104
(或者您可以通过选择“添加资源”,然后选择“新建”,通过资源编辑器添加这些资源)
要在代码中加载资源:
HRSRC hRes = FindResource( 0, "#104", "MYCUSTOMRESOURCETYPE" ); HGLOBAL hData = LoadResource( 0, hRes ); LPVOID data = LockResource( hData );
现在数据指向文本,并可以被转换为字符串。
编辑嗯看起来像大家同时发布相同的答案; P