zoukankan      html  css  js  c++  java
  • VC释放EXE资源文件

    原文地址:http://blog.csdn.net/wangningyu/article/details/4378378

    今天有个朋友问到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. {  
    5.     MessageBox(NULL,"资源文件释放实例!","测试",MB_OK);  
    6.     return 0;  
    7. }  

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

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

     success

    4、源码下载地址:

    http://download.csdn.net/source/1516859

  • 相关阅读:
    CSS选择器及优先级
    iframe中跨域页面访问parent的方法
    网页外链用了 target=_blank,结果悲剧了
    CarbonData:大数据融合数仓新一代引擎
    补习系列(14)-springboot redis 整合-数据读写
    python读写配置文件使用总结与避坑指南
    【云速建站】后台配置邮费
    解析:区块链的本质是伴随信息社会产生的一种新型生产关系
    用“黑科技”产放心粮,种地竟然和想象中有点不一样
    【云速建站】按照给定模板从0开始编辑网站页面
  • 原文地址:https://www.cnblogs.com/CocoWang/p/3890524.html
Copyright © 2011-2022 走看看