VS资源管理器添加自定义类型的资源文件,且读取资源文件到内存中

需求描述:

    借助一个打包工具,指定源文件 和 目标文件路径,用生成事件的方式,每次在VS编译之前执行,生成资源文件包resourse.g2xp(包含了项目中的所有.png图片和xml等资源文件)。

    将资源文件包resourse.g2xp加载到项目中,读取文件数据到内存,方便程序在运行中加载包中的图片等资源。


具体方法:

一、预生成事件

项目 —> 配置属性 —>生成事件 —> 预生成事件—>命令行 :

start $(ProjectDir)\G2XPackage.exe -p $(ProjectDir)\res_pack $(ProjectDir)\res.g2xp

意思是执行 宏定义ProjectDir 目录下的G2XPackage.exe程序,将 宏定义ProjectDir目录下的res_pack文件夹,打包成宏定义 ProjectDir 目录下的resourse.g2xp。

前提是G2XPackage.exe程序要存在,res_pack也要存在。

这样,每次编译之前就会执行预生成事件,生成一个resourse.g2xp文件


二、导入自定义资源文件

资源视图 —>添加资源 —>自定义  


输入自己想定义的类型,例如 RESPACK ,点击确认,就会在资源视图上生成响应的类型。

然后选中该类型 —>右键添加资源 —>导入,从弹出的文本选择对话框中选择要加入的文件resourse.g2xp,确定,就会看到在RESPACK目录下多了一个资源文件

PS:我在点了确定之后,RESPACK目录下并没有出现相应的资源文件,后来查看属性,才知道在导入时系统写入的路径出现了错误,修改正确的路径后,资源文件就出现了。


三、获取资源文件内容

BOOL CUDOApp::InitLoadResPackage()
{
	// 读取资源包文件
	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_RESPACK), "RESPACK");
	if (NULL == hRsrc)
		return FALSE;
	//获取资源的大小
	DWORD dwSize = SizeofResource(NULL, hRsrc); 
	if (0 == dwSize)
		return FALSE;

	//加载资源
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc); 
	if (NULL == hGlobal)
		return FALSE;
	//锁定资源
	LPVOID pBuffer = LockResource(hGlobal); 

	if (NULL == pBuffer)
		return FALSE;

// 这里转换为BYTE*,根据自己业务需要,也可转换为其它类型
	BYTE* pByte = new BYTE[dwSize + 1];
	memcpy(pByte, pBuffer, dwSize);

	GlobalUnlock(hGlobal);
// 读取资源到此结束,后面为业务内容

	BOOL bRet = G2XSetBundle(pByte, dwSize, _T("res"));

	delete[] pByte;
	pByte = NULL;

	return TRUE;
}



猜你喜欢

转载自blog.csdn.net/sunflower_della/article/details/79970243