VC释放EXE资源文件

        VC释放EXE资源文件       

        分类:            C、VC/MFC 2725人阅读 评论(6) 收藏 举报

今天有个朋友问到VC能否释放多个EXE、DLL或WAV等文件,我便做了个实例给他。

(注意:以下释放资源代码是不受文件扩展名所限制的,你可以释放更多类型文件)

下面是我写了个很方面的函数给大家用!

1、工程A要释放的程序是一个简单的MessageBox,源码如下:

  1. #include <windows.h> 
  2.  
  3. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) 
  4.     MessageBox(NULL,"资源文件释放实例!","测试",MB_OK); 
  5.     return 0; 

     编译生成MsgBox.exe,复制到工程B目录。

2、工程B为基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中,如下图:

    A、切换到资源视图,在上面单机右键:

insert

    B、单击"Import...",找到刚刚工程A编译生成的MsgBox.exe文件:

import

    C、设置导入的资源类型名,这个名称将是该函数的第三个参数,我们取资源类型名为EXE:

custom type

    D、此时,资源视图中多了一个类型为:EXE,资源ID为:IDR_EXE1,如下图:

res view

    E、增加一个按钮,添加响应事件,添加成员函数BOOL ReleaseRes(CString strFileName,WORD wResID,CString strFileType),具体代码如下:

  1. HCURSOR CTestDlg::OnQueryDragIcon() 
  2.     return (HCURSOR) m_hIcon; 
  3.  
  4. void CTestDlg::OnBtnRelease()  
  5.     // TODO: Add your control notification handler code here 
  6.     if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE")) 
  7.         MessageBox("释放文件成功!","提示",MB_OK); 
  8.     else 
  9.         MessageBox("释放文件失败!","提示",MB_OK); 
  10.  
  11. /************************************************************************/ 
  12. /* 函数说明:释放资源中某类型的文件                                    
  13. /* 参    数:新文件名、资源ID、资源类型                                
  14. /* 返 回 值:成功返回TRUE,否则返回FALSE 
  15. /* By:Koma   2009.07.24 23:30                             
  16. /************************************************************************/ 
  17. BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType) 
  18.     // 资源大小 
  19.     DWORD   dwWrite=0;       
  20.  
  21.     // 创建文件 
  22.     HANDLE  hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL, 
  23.                                 CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
  24.     if ( hFile == INVALID_HANDLE_VALUE ) 
  25.     { 
  26.         return FALSE; 
  27.     } 
  28.  
  29.     // 查找资源文件中、加载资源到内存、得到资源大小 
  30.     HRSRC   hrsc =  FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType); 
  31.     HGLOBAL hG = LoadResource(NULL, hrsc); 
  32.     DWORD   dwSize = SizeofResource( NULL,  hrsc); 
  33.  
  34.     // 写入文件 
  35.     WriteFile(hFile,hG,dwSize,&dwWrite,NULL);    
  36.     CloseHandle( hFile ); 
  37.     return TRUE; 

3、该函数是可重用类,本程序代码在VC6 + WIN SP3测试通过,运行效果如下图:

success

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值