我是靠谱客的博主 超级夏天,最近开发中收集的这篇文章主要介绍Windows下C++将各种资源文件引入exe文件(即无需携带很多res资源包),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 环境:Visual Studio2010
  • 语言: C++
  • 实际操作:
    1.将文件导入资源文件
    在这里插入图片描述
    资源文件中右键—添加----资源
    在这里插入图片描述
    选择导入—导入资源----并设置资源类型。资源类型命名随意,但是最好还是要和实际文件的类型一致比较好

  • 导入成功后,在Resource.h文件中,会产生相应的资源id,每个资源id对应的是一个完整的文件—即你导入的文件,准确的来说,你导入的文件,实质上,是被转成字节码保存起来的。有字节码,其实就可以生成该文件了,这是原理的问题,作为补充。
    在这里插入图片描述
  • 复制下列代码 到您的主文件cpp中
bool ExportToFile(const std::wstring& exportFilePath, const void* pBuffer, DWORD bufferLength)
{
	if (pBuffer == NULL || bufferLength <= 0)
	{
		return false;
	}
	HANDLE hFile = ::CreateFile(exportFilePath.c_str(),
		GENERIC_WRITE,
		0,
		NULL,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	if (hFile == NULL)
	{
		return false;
	}

	DWORD writetem = -1;
	BOOL ret = ::WriteFile(hFile, pBuffer, bufferLength, &writetem, NULL);
	if (writetem != bufferLength)
	{
		::CloseHandle(hFile);
		return false;
	}

	::CloseHandle(hFile);
	return true;
}

/**
* exportPath:文件路径,
* resourceId:资源ID :Resource.h中
* 导出资源包转成指定文件
*/
bool ExportRes(const std::wstring& exportPath, DWORD resourceId)
{
	HINSTANCE m_hInstance = g_hinstance;
	// "ZIP" 是自定义资源类型,可以自己决定
	HRSRC hrSrc = FindResource(m_hInstance, MAKEINTRESOURCE(resourceId), _T("ZIP"));
	if (hrSrc == NULL)
	{
		return false;
	}

	HGLOBAL hGlobalResource = LoadResource(m_hInstance, hrSrc);
	if (hGlobalResource == NULL)
	{
		return false;
	}

	const void* pResourceData = ::LockResource(hGlobalResource);
	if (!pResourceData)
	{
		return false;
	}

	DWORD resLength = SizeofResource(m_hInstance, hrSrc);
	bool ret = ExportToFile(exportPath, pResourceData, resLength);

	FreeResource(hGlobalResource);
	return ret;
}

上面的代码是将字节码转成您指定的文件。
其中资源id就是Resouce.h中定义的宏命令
exportPath指的是导出的文件路径

  • 调用如下:
    在这里插入图片描述
    直接用即可。
  • 运行程序:
    在这里插入图片描述
    可以看出 生成指定文件成功。

最后

以上就是超级夏天为你收集整理的Windows下C++将各种资源文件引入exe文件(即无需携带很多res资源包)的全部内容,希望文章能够帮你解决Windows下C++将各种资源文件引入exe文件(即无需携带很多res资源包)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部