我正在开发一个Win32应用程序。目前我正在使用包含制表符分隔数据的文本文件作为数据源。我希望将其嵌入资源中,这样我就不必担心将该文件与.exe文件一起发布了。
请问有人知道如何实现吗?
请问有人知道如何实现吗?
Windows二进制文件可以嵌入资源。 大多数资源是预定类型(例如菜单、图标或位图),但您也可以嵌入任意二进制数据(例如文本文件)。 从msdn文档中仅通过阅读很难确定正确的语法。
以下代码片段显示了如何从文件中嵌入二进制资源。
首先,您需要在头文件中定义一个资源标识符 (例如resource.h),该标识符将由C编译器和资源编译器使用:
#define MY_RESOURCE 300
然后,您需要添加到资源文件中 (例如resource.rc):
MY_RESOURCE RCDATA "file-with-data.txt"
最后,这是您可以访问此数据的方法:
void WorkOnResource(void) { HGLOBAL res_handle = NULL; HRSRC res; char * res_data; DWORD res_size;
// 注意:提供g_hInstance很重要,NULL可能无法工作 res = FindResource(g_hInstance, MAKEINTRESOURCE(MY_RESOURCE), RT_RCDATA); if (!res) return; res_handle = LoadResource(NULL, res); if (!res_handle) return; 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...
IDR_MYRESOURCE MYCUSTOMRESOURCETYPE "path_to_file.txt"
#define IDR_MYRESOURCE 104
(或者您可以通过资源编辑器添加这些,方法是选择“添加资源”,然后选择“新建”)
在代码中加载资源:
HRSRC hRes = FindResource( 0, "#104", "MYCUSTOMRESOURCETYPE" );
HGLOBAL hData = LoadResource( 0, hRes );
LPVOID data = LockResource( hData );
现在数据指向文本,可以转换为字符串。
编辑 嗯,看起来每个人都同时发布了相同的答案;P