有时候会想在A.exe释放b.exe以供A.exe使用,这时候就会用到释放资源这玩意~
1)在该工程的ResourceFiles右键添加资源
2)接着会出现如下界面,然后点击导入
3)接着会出现如下界面,然后加入你想加入的文件
接着出现如下界面:
4)最后,在代码里加入头文件:#include "resource.h"
3、代码示例
#include "stdafx.h"
#include "resource.h"
int _tmain(int argc, _TCHAR* argv[])
{
// IDR_TESTEXE1是新增资源在resource.h中定义的资源ID号
HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_TESTEXE1), L"PNG");
if (hResInfo == NULL)
{
DWORD dwError = GetLastError();
return -1;
}
// 加载资源
HGLOBAL hResData = LoadResource(NULL, hResInfo);
// 锁住资源
LPVOID pvResData = LockResource(hResData);
// 获取资源大小
DWORD dwResSize = SizeofResource(NULL, hResInfo);
// 创建文件
HANDLE hFile = CreateFile(L"D:\\test\\test.png", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL, CREATE_ALWAYS, FILE_SHARE_READ, NULL);
// 写文件
DWORD dwWritten = 0;
WriteFile(hFile, pvResData, dwResSize, &dwWritten, NULL);
CloseHandle(hFile);
FreeResource(hResData);
return 0;
}
下面这个感觉有点好玩,还可以加载b.exe里面的资源
#include "stdafx.h"
#include "resource.h"
// 得先知道该资源在test.exe的resource.h中的定义
#define IDB_PNG_BG 204
int _tmain(int argc, _TCHAR* argv[])
{
// res\\test.exe是放到A.exe代码目录下
HMODULE hLib = LoadLibrary(L"res\\test.exe");
// 查找hLib的资源,hLib为空则为查找该exe中的资源
HRSRC hResInfo = FindResource(hLib, MAKEINTRESOURCE(IDB_PNG_BG), L"PNG");
if (hResInfo == NULL)
{
DWORD dwError = GetLastError();
return -1;
}
// 加载资源
HGLOBAL hResData = LoadResource(hLib, hResInfo);
// 锁住资源
LPVOID pvResData = LockResource(hResData);
// 获取资源大小
DWORD dwResSize = SizeofResource(hLib, hResInfo);
// 创建文件
HANDLE hFile = CreateFile(L"D:\\test\\test.png", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL, CREATE_ALWAYS, FILE_SHARE_READ, NULL);
// 写文件
DWORD dwWritten = 0;
WriteFile(hFile, pvResData, dwResSize, &dwWritten, NULL);
CloseHandle(hFile);
FreeResource(hResData);
return 0;
}