/* 函數功能:釋放資源文件 參數說明: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