环境: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指的是导出的文件路径
- 调用如下:
直接用即可。 - 运行程序:
可以看出 生成指定文件成功。