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

今天有个朋友问到VC能否释放多个EXE、DLL或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. }

#include <windows.h>

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
MessageBox(NULL,"资源文件释放实例!","测试",MB_OK);
return 0;
}

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

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

HCURSOR CTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CTestDlg::OnBtnRelease()
{
// TODO: Add your control notification handler code here
if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))
MessageBox("释放文件成功!","提示",MB_OK);
else
MessageBox("释放文件失败!","提示",MB_OK);
}

/************************************************************************/
/* 函数说明:释放资源中某类型的文件
/* 参 数:新文件名、资源ID、资源类型
/* 返 回 值:成功返回TRUE,否则返回FALSE
/* By:Koma 2009.07.24 23:30
/************************************************************************/
BOOL CTestDlg::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测试通过,运行效果如下图:

4、源码下载地址:

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

VC释放EXE资源文件的更多相关文章

  1. vc 国际化的资源文件处理

    MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本.在不同语种的Windows平台上应该运行相应语种的应用程序.也就是说程序的用户界面( ...

  2. Exe资源文件

    在 Win NT/2000/XP/2003 下,有现成的API函数,这些函数在 Win 9x/ME 下不能使用. HANDLE BeginUpdateResource(LPCTSTR pFileNam ...

  3. 如何在Qt资源文件中包含和释放exe等各种类型文件?

    操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放ex ...

  4. 在VC资源文件中加入声音资源

    本文介绍如何在VC资源文件中加入自己的声音资源,使自己的应用程序可以播放声音. 1.首先用文本编辑器(如记事本)打开资源文件(.rc文件) 在最后加入自己的声音资源,如下IDW WAVE " ...

  5. Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤

    资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...

  6. 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

    原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...

  7. Pyinstaller如何将资源文件一起打包至exe中

    基本原理:Pyinstaller 可以将资源文件一起bundle到exe中,当exe在运行时,会生成一个临时文件夹,程序可通过sys._MEIPASS访问临时文件夹中的资源 官方说明:https:// ...

  8. Pyinstaller打包: 将资源文件或文件夹打包到最后生成的exe中

    前提:用pyinstaller打包时部分资源文件可以利用qrc转成py文件来读取,但是有部分文件类型不适用. 原理:Pyinstaller 将资源文件一起打包到exe中.当exe运行时,会生成一个临时 ...

  9. 【转】资源文件在Delphi编程中的应用

    段东宁 计亚南 (郴州职业技术学院, 湖南 郴州  423000) 摘要: 资源文件是一种能有效地组织.管理和使用资源的文件形式,在软件开发中有着广泛的应用.本文详细介绍了在Delphi编程中资源文件 ...

随机推荐

  1. sort函数的例子

    10.11编写程序,使用stable_sort和isShorter将传递给你的elimDups版本的vector排序.打印vector的内容. #include<algorithm> #i ...

  2. linux安全加固

    1 . BIOS 你应该总是在系统启动的时候设置一个BIOS 密码和禁用从CD-ROM 和软盘引导,这将可以防止一些人未经允许访问你的系统和更改BIOS 设置 2 .sshd 服务 SSH 是一个协议 ...

  3. jquery动态添加列表后样式失效解决方式

    最近在做一个通讯录,使用jquery mobile方式来做,在动态添加列表后,listview原有的样式失效,折腾一会,找出解决办法.代码如下. <%@ page language=" ...

  4. 亿能测试白盒安全测试模板V1.0发布

    亿能测试白盒安全测试模板V1.0发布http://automationqa.com/forum.php?mod=viewthread&tid=2911&fromuid=21

  5. day-1

    /* 倒计时就要结束了 在机房的最后一个晚上 恩 就要结束了 上午考试 下午背板 找了几个原题敲了敲 晚上zjk老妈送的饭 撑死死死死了 好吃23333 吃饭完和zjk在机房门口楼梯上聊了一会 恩 以 ...

  6. 读《编写高质量代码:改善JavaScript程序的188个建议》2

  7. C#常用正则验证

    #region Protected Property protected Regex rLetters { get { return new Regex("[a-zA-Z]{1,}" ...

  8. Servlet相关接口和Servlet的生命周期

    http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ...

  9. Sublime Text2配置python环境

    1.下载python并安装     地址:https://www.python.org/downloads/ 2.下载Sublime Text2 并安装     地址:http://www.subli ...

  10. Deep Learning 学习随记(三)Softmax regression

    讲义中的第四章,讲的是Softmax 回归.softmax回归是logistic回归的泛化版,先来回顾下logistic回归. logistic回归: 训练集为{(x(1),y(1)),...,(x( ...