为了简化程序文件多且杂,可将部分文件如dll文件、资源文件(文本文件、图片文件等)等作为资源插入到程序中。等程序运行时,再在本地生成资源文件或者释放到本地。
如果进行了上述操作,只需要将程序在编译后,只需要一个exe文件即可正常运行,运行.exe文件后,本地会自动生成需要的资源文件。
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include
#include
#include"resource.h"
using namespace std;
int main()
{
//获取指定模块的资源
HRSRC src = FindResource(NULL, MAKEINTRESOURCE(IDR_MYRESOURCE2), L"MYRESOURCE");
if (src == NULL){
cout << "FindResource Failed!" << endl;
return FALSE;
}
//获取资源大小
DWORD size = SizeofResource(NULL, src);
if (size <= 0){
cout << "SizeofResource Failed!" << endl;
return FALSE;
}
//将资源加载到内存
HGLOBAL globslm = LoadResource(NULL, src);
if (globslm == NULL){
cout << "LoadResource Failed!" << endl;
return FALSE;
}
//锁定资源
LPVOID msrc = LockResource(globslm);
if (msrc == NULL){
cout << "LockResource Failed!" << endl;
return FALSE;
}
//将资源保存为文件
FILE* fp = NULL;
fopen_s(&fp, "test1_.txt", "wb+");//打开一个文件/创建新文件
if (fp == NULL){
cout << "LockResource Failed!" << endl;
return FALSE;
}
fwrite(msrc, sizeof(char), size, fp);
return 0;
}
经过运行,程序未出现BUG,其中中用到的四个函数为windows提供的api,详细功能可直接百度,不予多述。
资源文件可能被编译到哪了呢?
到目前为止,上述代码的实现是将资源文件“直接放入”了.exe文件中。当然,也存在放入dll文件中的情况,但博主未遇到或者如何进一步加载到dll文件尚待研究。