VC释放EXE资源文件
来源:互联网 发布:知乎日报app下载 编辑:程序博客网 时间:2024/05/01 16:48
VC释放EXE资源文件
分类: C、VC/MFC2009-07-24 23:46 4162人阅读 评论(11) 收藏 举报
exenullwinapidllmfcfile
今天有个朋友问到VC能否释放多个EXE、DLL或WAV等文件,我便做了个实例给他。
(注意:以下释放资源代码是不受文件扩展名所限制的,你可以释放更多类型文件)
下面是我写了个很方面的函数给大家用!
1、工程A要释放的程序是一个简单的MessageBox,源码如下:
- #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),具体代码如下:
- 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
- 9楼 jamseyang 2013-04-14 03:39发表 [回复]
- 感谢楼主分享。资源类型貌似必须是EXE,我插入一个zip文件资源类型填写为24,代码中FindResource总是失败,改成类型改成EXE机就OK了
- 8楼 Mr_Right 2013-02-16 21:05发表 [回复]
- 把工程移到另一个路径后该怎么办呢?显示资源加载失败!
- 7楼 ytzou_06 2012-08-29 15:50发表 [回复]
- 学习了
- 6楼 sunnysab 2012-08-21 12:14发表 [回复]
- 为什么释放的是test.exe呢?
if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))
明明在资源里包含的是MegBox.exe啊!不解- Re: wangningyu 2012-08-23 15:35发表 [回复]
- 回复sunnysab:看下函数,第一个参数是生成文件的完整路径
- 5楼 yiyefangzhou24 2012-01-20 11:19发表 [回复]
- 楼主犀利,一直在找这个资料
- 4楼 fyw_220 2011-11-12 13:06发表 [回复]
- 我直接下载了上面的链接里的程序, 我咋老是出现fatal error C1083: 无法打开预编译头文件:“.\Debug/ReleaseResFile.pch”: No such file or directory
是咋回事啊???请高手解答啊,,谢谢了
- 3楼 匿名用户 2010-01-29 09:29发表 [回复] [引用] [举报]
- [e03]BY:BY
- Re: fyw_220 2011-11-12 13:06发表 [回复] [引用] [举报]
- 回复匿名用户:我直接下载了上面的链接里的程序, 我咋老是出现fatal error C1083: 无法打开预编译头文件:“.\Debug/ReleaseResFile.pch”: No such file or directory
是咋回事啊???请高手解答啊,,谢谢了
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE资源文件
- VC释放EXE自身的资源文件
- VC释放资源文件DLL,EXE等。。。
- [VC++]释放资源文件
- vc释放资源文件
- VC释放资源到文件
- VC 从资源中释放文件
- 释放exe资源
- 释放资源文件中的exe文件并运行
- Map遍历
- unix网络编程<杂记一>----包裹函数
- c#应用程序的发布
- 怎么用vnc访问自己电路,同时又是同一个会话?
- C/C++堆、栈及静态数据区
- VC释放EXE资源文件
- Spring JMS 消息处理及配置
- Complex类
- 帐户当前被锁定,所以用户 'sa' 登录失败。系统管理员无法将该帐户解锁。
- 怎样以root帐号进入ubuntu
- 几个基本方法的说明
- 一位软件工程师的7年的总结
- JAVASE----16----IO流_3
- 图论知识点列表