原文地址:http://blog.csdn.net/wangningyu/article/details/4378378windows
今天有个朋友问到VC可否释放多个EXE、DLL或WAV等文件,我便作了个实例给他。函数
(注意:如下释放资源代码是不受文件扩展名所限制的,你能够释放更多类型文件)测试
下面是我写了个很方面的函数给你们用!spa
一、工程A要释放的程序是一个简单的MessageBox,源码以下:.net
- #include <windows.h>
-
- int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
- {
- MessageBox(NULL,"资源文件释放实例!","测试",MB_OK);
- return 0;
- }
code
编译生成MsgBox.exe,复制到工程B目录。blog
二、工程B为基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中,以下图:事件
A、切换到资源视图,在上面单机右键:ip

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()
- {
-
- if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))
- MessageBox("释放文件成功!","提示",MB_OK);
- else
- MessageBox("释放文件失败!","提示",MB_OK);
- }
-
- 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;
- }
三、该函数是可重用类,本程序代码在VC6 + WIN SP3测试经过,运行效果以下图:

四、源码下载地址:
http://download.csdn.net/source/1516859