动态释放资源文件

一、动态释放资源文件

1 添加资源文件

新建项目后,转到资源视图,然后 右键空白处 -> 添加资源 -> 导入 -> 选择需要添加的资源文件(如 exe、dll 等)-> 然后添加自定义类型(如 Binary,自定义类型名会自动转为字符串,后面要用到) -> 修改 ID(如 "IDR_DATA"必须加双引号,将其手动变为字符串类型,否则是一个数值,后面要用到) -> 修改 外部文件False(将资源文件整合到 exe 中):

2 在代码中释放资源文件

bool ReleaseResource(const std::wstring& resource_name, const std::wstring& resource_type, 
		const std::wstring& output_path)
	{
		// 获取当前模块句柄
		HMODULE hMod = GetModuleHandle(NULL);
		if (!hMod)
			return false;

		
		// 打开资源
		HRSRC hResource = FindResourceW(hMod, resource_name.c_str(), resource_type.c_str());
		if (!hResource)
			return false;

		// 加载资源
		HGLOBAL hLoadedResource = LoadResource(hMod, hResource);
		if (!hLoadedResource)
			return false;

		// 锁定资源
		void* pResourceData = LockResource(hLoadedResource);
		if (!pResourceData)
			return false;

		// 获取资源大小
		DWORD dwResourceSize = SizeofResource(hMod, hResource);
		if (!dwResourceSize)
			return false;

		// 打开输出文件
		std::ofstream outFile(output_path, std::ios::binary);
		if (!outFile)
			return false;

		// 写入资源数据到文件
		outFile.write(static_cast<char*>(pResourceData), dwResourceSize);
		if (!outFile)
			return false;

		outFile.close();

		return true;

	}

注:resource_name:"IDR_DATA",resource_type:"Binary",资源 ID 加上双引号后就是字符串了,调用 FindResource 函数时 ID 参数可以传入字符串,否则资源 ID 没加双引号就是一个数值,我们传入字符串用 FindResource 函数寻找资源时,会提示无法找到该资源。

posted @ 2025-08-22 19:10  lostin9772  阅读(10)  评论(0)    收藏  举报