下面的代码实现将资源释放到指定的目录:
/*
* Copyright (c) 2017 initm.com All rights reserved.
* 作者: 独行
* 描述: 将模块资源释放到指定目录
* 完成时间: 2017-11-2
*/
HMODULE GetSelfModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)
? (HMODULE) mbi.AllocationBase : NULL);
}
BOOL WriteBinarySourceToFileW(CONST LPCWSTR lpSouceName,CONST LPCWSTR lpSourceType, CONST LPCWSTR szFileName)
{
//将图标文件复制到目标目录下
HRSRC hRsrc = FindResourceW(GetSelfModuleHandle(), lpSouceName, lpSourceType);
if (NULL == hRsrc)
return FALSE;//出错
HGLOBAL hGlobal = LoadResource(GetSelfModuleHandle(), hRsrc);
if (NULL == hGlobal)
return FALSE;
DWORD dwSize = SizeofResource(GetSelfModuleHandle(), hRsrc);
if(0 == dwSize){
return FALSE;
}
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
return FALSE;
//打开文件
HANDLE hFile = CreateFileW(szFileName, GENERIC_READ | GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, 0, NULL);
if(INVALID_HANDLE_VALUE != hFile){
DWORD dwCount = 0;
if(WriteFile(hFile, pBuffer, dwSize, &dwCount, NULL)){
FlushFileBuffers(hFile);
}else{
return FALSE;
}
}else{
FreeResource(hGlobal);
return FALSE;//出错
}
CloseHandle(hFile);
FreeResource(hGlobal);
return TRUE;
}
