/*
@Desc:将程序中的资源解压
@param1[in]:szResType:资源类型
@param2[in]:dwResID:资源ID
@param3[in]:szFileName:资源解压到此文件
@param4[in]:bFailIfExists:为TRUE时,如果szFileName文件已经存在,则执行失败,否则强制替换
@return:执行成功返回TRUE,否则返回FALSE
*/
BOOL WriteResToFile(LPCTSTR szResType,DWORD dwResID,LPCTSTR szFileName,BOOL bFailIfExists)
{
if (bFailIfExists &&
GetFileAttributes(szFileName) != INVALID_FILE_ATTRIBUTES)
return FALSE;
//查找资源
HRSRC hResInfo = FindResource(NULL,MAKEINTRESOURCE(dwResID),szResType);
if (hResInfo == NULL)
return FALSE;
//获得资源大小
DWORD dwSize = SizeofResource(NULL,hResInfo);
if (dwSize == 0)
return FALSE;
HGLOBAL hResData = LoadResource(NULL,hResInfo);
if (hResData == NULL)
return FALSE;
HANDLE hFile = CreateFile(szFileName,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
FreeResource(hResData);
return FALSE;
}
DWORD dwWritten = 0;
LPVOID lpBase = LockResource(hResData);
BOOL bRet = FALSE;
if (lpBase != NULL)
{
BOOL bRet = WriteFile(hFile,lpBase,dwSize,&dwWritten,NULL);
UnlockResource(hResData);
}
FreeResource(hResData);
CloseHandle(hFile);
return bRet;
}