需求描述:
借助一个打包工具,指定源文件 和 目标文件路径,用生成事件的方式,每次在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;}
如果觉得《VS资源管理器添加自定义类型的资源文件 且读取资源文件到内存中》对你有帮助,请点赞、收藏,并留下你的观点哦!