[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

转载于:https://www.cnblogs.com/QRcode/p/3191184.html

你可能感兴趣的:([C/C++]VC++中释放自身资源文件)