VC释放EXE自身的资源文件

看到好多朋友需要这样的功能,便整理了一下写成一个函数,以便后续使用~~

这个函数是可重复使用的代码,以下释放资源代码是不受文件扩展名所限制的,你可以释放更多类型文件,比如DLL、SYS、TXT、WAV等等......

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

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

2、工程B
     为基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中,如下图:
    A、切换到资源视图,在上面单机右键:


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


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


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


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

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

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


4、示例代码:
      Souce_Demo.rar (34.85 KB)



ZZ: http://www.cctry.com/thread-10129-1-1.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值