zoukankan      html  css  js  c++  java
  • EXE中释放文件

    今天有个朋友问到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),具体代码如下: 

    void CMy2Dlg::OnBnClickedButton1()
    {
        // TODO: Add your control notification handler code here
        if(ReleaseRes(L"c:\111.dll",(WORD)IDR_DLL1,L"DLL"))
            MessageBox(L"释放文件成功!",L"提示",MB_OK);
        else
            MessageBox(L"释放文件失败!",L"提示",MB_OK);
    }
    
    
    /************************************************************************/
    /* 函数说明:释放资源中某类型的文件                                     
    /* 参    数:新文件名、资源ID、资源类型                                 
    /* 返 回 值:成功返回TRUE,否则返回FALSE  
    /* By:Koma     2009.07.24 23:30                              
    /************************************************************************/
    BOOL CMy2Dlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType)
    {
        // 资源大小
        DWORD    dwWrite=0;        
    
        // 创建文件
        HANDLE    hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
                                    CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        if ( hFile == INVALID_HANDLE_VALUE )
        {
            return FALSE;
        }
    
        // 查找资源文件中、加载资源到内存、得到资源大小
        HRSRC    hrsc =  FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
        HGLOBAL hG = LoadResource(NULL, hrsc);
        DWORD    dwSize = SizeofResource( NULL,  hrsc);
    
        // 写入文件
        WriteFile(hFile,hG,dwSize,&dwWrite,NULL);   
        CloseHandle( hFile );
        return TRUE;
    }
     

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

     success

  • 相关阅读:
    【Java学习系列】第3课--Java 高级教程
    【夯实PHP基础】nginx php-fpm 输出php错误日志
    【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
    【架构设计】分布式文件系统 FastDFS的原理和安装使用
    【13】2016.12.13 周二--《小结2016》
    【诗词歌赋】2016.12.15 周四--文言鸿儒《年终的日常》
    【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
    【夯实Nginx基础】Nginx工作原理和优化、漏洞
    【夯实PHP基础】PHP的反射机制
    HTML DOM简易学习笔记
  • 原文地址:https://www.cnblogs.com/Browneyes/p/4916299.html
Copyright © 2011-2022 走看看