/* 函数功能:释放资源文件 参数说明: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