/*
函數功能:釋放資源文件
參數說明:DWORD dwResName 指定要釋放的資源ID號,如IDR_EXE
LPCSTR lpResType 指定釋放的資源的資源類型
LPCSTR lpFilePathName 指定釋放后的目標文件名
返回值:成功則返回TRUE,失敗返回FALSE
*/
BOOL FreeResFile(DWORD dwResName, LPCSTR lpResType, LPCSTR lpFilePathName )
{
HMODULE hInstance = ::GetModuleHandle(NULL);//得到自身實例句柄
HRSRC hResID = ::FindResource(hInstance,MAKEINTRESOURCE(dwResName),lpResType);//查找資源
HGLOBAL hRes = ::LoadResource(hInstance,hResID);//加載資源
LPVOID pRes = ::LockResource(hRes);//鎖定資源
if (pRes == NULL)//鎖定失敗
{
return FALSE;
}
DWORD dwResSize = ::SizeofResource(hInstance,hResID);//得到待釋放資源文件大小
HANDLE hResFile = CreateFile(lpFilePathName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//創建文件
if (INVALID_HANDLE_VALUE == hResFile)
{
//TRACE("創建文件失敗!");
return FALSE;
}
DWORD dwWritten = 0;//寫入文件的大小
WriteFile(hResFile,pRes,dwResSize,&dwWritten,NULL);//寫入文件
CloseHandle(hResFile);//關閉文件句柄
return (dwResSize == dwWritten);//若寫入大小等於文件大小,返回成功,否則失敗
}
調用時,格式如下:FreeResFile(IDR_DLL ,"RT_DLL","D:\\1.exe");
如果是建立的空項目,記得添加上頭文件 #include "resource.h",不然識別不了資源ID:IDR_DLL
另外附上添加資源過程:
在解決方案資源管理器中,右擊資源文件,選擇添加-〉資源,在彈出來的添加資源對話框中,選擇導入,然后切換到所有文件(*.*)后,選擇需要導入的文件,按下打開按鈕后,在自定義資源類型對話框中的資源類型一欄填入資源類型,比如上例中“RT_DLL”,注意:這里的“”也要填入,然后按確定即可。
部分轉自:http://hi.baidu.com/sonsie1919/item/fa5bf1b8b479c071244b096e
