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

  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/CocoWang/p/3890524.html
Copyright © 2011-2022 走看看