[C/C++]VC++中釋放自身資源文件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM