原文地址: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
![insert](http://static.javashuo.com/static/loading.gif)
B、單擊"Import...",找到剛剛工程A編譯生成的MsgBox.exe文件:內存
![import](http://static.javashuo.com/static/loading.gif)
C、設置導入的資源類型名,這個名稱將是該函數的第三個參數,咱們取資源類型名爲EXE:
![custom type](http://static.javashuo.com/static/loading.gif)
D、此時,資源視圖中多了一個類型爲:EXE,資源ID爲:IDR_EXE1,以下圖:
![res view](http://static.javashuo.com/static/loading.gif)
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測試經過,運行效果以下圖:
![success](http://static.javashuo.com/static/loading.gif)
四、源碼下載地址:
http://download.csdn.net/source/1516859