c++ 释放资源

1、适合场景

有时候会想在A.exe释放b.exe以供A.exe使用,这时候就会用到释放资源这玩意~

2、涉及函数以及调用次序

2.1  查找资源:FindResource

2.2  加载资源:LoadResource

2.3 锁住资源:LockResource

2.4 获取资源大小:SizeofResource

2.5 创建文件:CreateFile

2.6 将资源写到文件中:WriteFile

PS:在调用函数之前,还要将资源放到A.exe代码目录中,并做如下操作:

1)在该工程的ResourceFiles右键添加资源

c++ 释放资源_第1张图片

2)接着会出现如下界面,然后点击导入
c++ 释放资源_第2张图片
3)接着会出现如下界面,然后加入你想加入的文件
c++ 释放资源_第3张图片

接着出现如下界面: 

c++ 释放资源_第4张图片
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;
}

 

你可能感兴趣的:(Windows编程,c++)