VC++ 6.0资源释放源码
来源:互联网 发布:hadoop 源码 pdf 编辑:程序博客网 时间:2024/05/07 13:47
VC++ 6.0资源释放源码
//调用释放资源
release("calcu.exe",IDR_EXE1,"EXE");
//资源释放函数
void release(CString strFileName,WORD wResID,CString strFileType)
{HRSRC hResource=FindResource(GetModuleHandle(NULL),MAKEINTRESOURCE(wResID),strFileType);
if(hResource)
{
HGLOBAL hg=LoadResource(GetModuleHandle(NULL),hResource);
if(hg)
{
LPVOID pData=LockResource(hg);
if(pData)
{
DWORD dwSize=SizeofResource(GetModuleHandle(NULL),hResource);
CFile calcFile;
if(calcFile.Open(strFileName,CFile::modeCreate|CFile::modeReadWrite))
{
calcFile.Write(pData,dwSize);
calcFile.Close();
}
}
}
}
}
更多参考
方法一:使用CreateFile和WriteFile
HRSRC res=::FindResource(NULL, MAKEINTRESOURCE(IDR_JPG1), "jpg");
HGLOBAL gl=::LoadResource(NULL,res);
LPVOID lp=::LockResource(gl); // 查找,加载,锁定资源
CString strFileName("d:\Temp.jpg");
CFileFind fFind;
BOOL bExist=fFind.FindFile(strFileName); //判断文件是否存在
fFind.Close ();
if(!bExist) //如果文件不存在则创建
{
HANDLE fp=::CreateFile(strFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_NEW, //创建新文件,如目标文件已存在则调用失败
0,
NULL);
DWORD aa;
if (!::WriteFile (fp,lp,::SizeofResource(AfxGetResourceHandle(),res),&aa,NULL))
return; //sizeofResource 得到资源文件的大小
::CloseHandle (fp); //关闭句柄
::FreeResource (gl); //释放内存
}
方法2:使用CFile
CString strFileName("d:\Temp.jpg");
CFileFind fFind;
BOOL bExist=fFind.FindFile(strFileName); //判断文件是否存在
fFind.Close ();
if(!bExist)
{
HRSRC hResInfo = ::FindResource(NULL,(LPCSTR)IDR_JPG1,"jpg");
HGLOBALhRes = ::LoadResource(NULL,hResInfo );
CFile ff;
ff.Open( "temp.jpg", CFile::modeCreate | CFile::modeWrite, NULL))
ff.WriteHuge((LPSTR)hRes, ::SizeofResource(::AfxGetResourceHandle(), hResInfo) ); //写入文件
ff.Close();
}
函数说明:
函数原型:HRSRC FindResourceEx(HXODULE hModule,LPCTSTR lpType,LPCTSTR lpName,WORD wLanguage);
函数功能:该函数确定指定模块中指定类型、名称及语言的资源所在位置。
参数:
hModule:处理包含资源的可执行文件的模块。如果参数值为NULL,则函数搜索曾经创建的最近过程的模块。
lpType:指向以NULL为结束符的字符串,它指定了被列举出的资源类型名称。若要了解更多的信息,请参见注意部分。作为标准类型,这个参数取值同EnumResLangProclpType。
lpName:指向说明资源文件名称并以NULL为结束符的字符串。若要了解更多的信息,请参见注意部分。
WLanguage:指明语言资源。若此参数为MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),则为了指定零一种语言,可以使用宏创建这个参数。更多的信息请参见MAKELANGID。
返回值:如果函数运行成功,其返回值是一个指定资源信息块的句柄。为了获得资源,要将此句柄传递给LoadResource函数。如果函数运行失败,返回值为空。若想获得更多的错误信息,请调用GetLastError函数。
函数原型; HGLOSAL LoadResouare(HMODULE hModule,HRSRC hReslnfo);
函数功能:该函数装载指定资源到全局存储器。
参数:
hModule:处理包合资源的可执行文件的模块句柄。若hModule为NULL,系统从当前过程中的模块中装载资源。
hReslnfo:将被装载资源的句柄。它必须由函数FirtdResource或FindResourceEx创建。
返回值:如果函数运行成功,返回值是相关资源的数据的句柄。如果函数运行失败,返回值为NULL。若想获得更多的错误信息,请调用GetLastError函数。
注意:LoadResource的返回类型是向后兼容的HGLOBAL型,而不是因为函数返回一个全局存储块句柄。不要传递这个句柄给函数GlobalLock或GlobalFree。为了得到更多资源数据信息,请调用LockResource函数。
当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、图标以及菜单所占的内存资源:加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:DestroyCursor;图标:Destroylcon;菜单:DestroyMenu。
当过程创建终止时,系统将自动删除这些资源。但是调用相关函数也可以保留内存减少过程的工作设置所占空间。
函数功能:该函数锁定内存中的指定资源。
函数原型:LPVOID LockResource(HGLOBAL hResDate);
参数:
hResDate:被装载的资源的句柄。函数LosdResource可以返回这个句柄。
返回值:如果被装载的资源被所住了,返回值是资源第一个字节的指针;否则为NULL。
注意:通过使用函数FindResource或FindResourceEx返回句柄试图所住资源,不再工作。可以返回一个错误的数据和任意数据的指针。
当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、目标以及某单所占的内存资源:加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:DestroyCursor;图标:Destroylcon;菜单:DestroyMenu。
当过程创建终止时,系统将自动删除这些资源。但是调用相关函数也可以保留内存减少过程的工作设置所占空间。
FreeResource()
函数功能:该函数已过时。它为16位的基于Win32的应用程序提供了一个简单的端口。对于Win32应用程序(32位)没有必要释放用LoadResource函数装载资源。由LoadResource所获得的资源随着被装载模块的卸载自动被释放。但是,为了保留内存减少的程序工作设置所占空间大小,必须通过调用下列表中的函数以释放加速器表、位图、光标、图标以及菜单所占的内存资源。
加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:DestroyCursor;
图标:Destroylcon;菜单:DestroyMenu。
- VC++ 6.0资源释放源码
- VC释放资源
- [VC++]释放资源文件
- VC释放资源
- vc释放资源文件
- VC资源分配、释放表
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放资源到文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC资源分配、释放表
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC资源分配、释放表
- VC资源分配、释放表
- incredibuild工具
- uninstall Nero
- asp.net登录票据验证
- oracle 给用户只访问指视图 或 表 的权限
- Redis源码学习之【暂停说明】
- VC++ 6.0资源释放源码
- c++中可以对类中私有成员中的静态变量初始化吗?
- Android Ams浅析
- url为onclick事件时报tree未定义解决方法
- Uva-Live 3905-Meteor
- Hudson安装、配置
- 自己动手写搜索引擎(常搜吧历程七#解析文档之WORD#)(Java、Lucene、hadoop)
- 开源工具-hostsPlus
- 取余与位运算