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右键添加资源

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;
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值