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。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝发货单号填到别人那去了怎么办 买家申请淘宝介入后同意退款怎么办 淘宝卖家手机版购买装修模块怎么办 天猫店铺和淘宝店铺想要装修怎么办 支付宝转账银行卡卡号错误怎么办 淘宝图片空间照片全部删除了怎么办 我把淘宝图片空间照片删除了怎么办 淘宝发布宝贝怎么没知道品牌怎么办 淘宝提前确认收货了怎么办已经发货 苹果支付安全提示问题忘记了怎么办 没有在规定日期交首付款怎么办 淘宝申请退款又不想退了怎么办 淘宝申请退款后又不想退了怎么办 申请退款后如果不想退了怎么办 世纪明德申请退款但不想退了怎么办 天猫申请换货商家不换怎么办 乐视手机刷机不想清除数据怎么办 捡的苹果手机刷机了要id怎么办 苹果6plus玩王者荣耀卡怎么办 华为荣耀3c的手机内存不足怎么办 红米4x玩王者荣耀卡怎么办 华为手机荣耀10一直重启怎么办 荣耀9青春版老自动重启怎么办 手机开不开机停在华为界面怎么办 华为荣耀9老是反复的重启怎么办 华为荣耀4x老是反复的重启怎么办 手机更新系统后开不了机怎么办 荣耀畅玩7x没有4g网络怎么办 华为4x数字解锁不对中怎么办 华为手机需要解锁后才能刷机怎么办 畅玩6x锁屏壁纸黑了怎么办 指纹密码解锁的手机解不开了怎么办 客户说物流太慢了要退货怎么办 天猫买的手机商家不给发票怎么办 天猫超市下单付款后缺货怎么办 淘宝卖家填写假的单号不发货怎么办 天猫商家72小时未发货怎么办 天猫精灵方糖不按顺序播放怎么办 在天猫购物已付款不发货怎么办 淘宝退货商家收到货不退款怎么办 被有实名认证的闲鱼卖家骗了怎么办