VC釋放EXE資源文件

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

今天有個朋友問到VC可否釋放多個EXE、DLL或WAV等文件,我便作了個實例給他。函數

 

(注意:如下釋放資源代碼是不受文件擴展名所限制的,你能夠釋放更多類型文件)測試

 

下面是我寫了個很方面的函數給你們用!spa

 

一、工程A要釋放的程序是一個簡單的MessageBox,源碼以下:.net

 

  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. }  

code

 

 

     編譯生成MsgBox.exe,複製到工程B目錄。blog

 

 

 

二、工程B爲基於MFC對話框程序,先插入已經存EXE(或DLL)文件到VC資源文件中,以下圖:事件

 

    A、切換到資源視圖,在上面單機右鍵:ip

 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),具體代碼以下: 

 

  1. HCURSOR CTestDlg::OnQueryDragIcon()  
  2. {  
  3.     return (HCURSOR) m_hIcon;  
  4. }  
  5.   
  6. void CTestDlg::OnBtnRelease()   
  7. {  
  8.     // TODO: Add your control notification handler code here  
  9.     if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))  
  10.         MessageBox("釋放文件成功!","提示",MB_OK);  
  11.     else  
  12.         MessageBox("釋放文件失敗!","提示",MB_OK);  
  13. }  
  14.   
  15. /************************************************************************/  
  16. /* 函數說明:釋放資源中某類型的文件                                      
  17. /* 參    數:新文件名、資源ID、資源類型                                  
  18. /* 返 回 值:成功返回TRUE,不然返回FALSE   
  19. /* By:Koma   2009.07.24 23:30                               
  20. /************************************************************************/  
  21. BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType)  
  22. {  
  23.     // 資源大小  
  24.     DWORD   dwWrite=0;        
  25.   
  26.     // 建立文件  
  27.     HANDLE  hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,  
  28.                                 CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);  
  29.     if ( hFile == INVALID_HANDLE_VALUE )  
  30.     {  
  31.         return FALSE;  
  32.     }  
  33.   
  34.     // 查找資源文件中、加載資源到內存、獲得資源大小  
  35.     HRSRC   hrsc =  FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);  
  36.     HGLOBAL hG = LoadResource(NULL, hrsc);  
  37.     DWORD   dwSize = SizeofResource( NULL,  hrsc);  
  38.   
  39.     // 寫入文件  
  40.     WriteFile(hFile,hG,dwSize,&dwWrite,NULL);     
  41.     CloseHandle( hFile );  
  42.     return TRUE;  
  43. }  

 

 

 

三、該函數是可重用類,本程序代碼在VC6 + WIN SP3測試經過,運行效果以下圖:

 

 

 success

 

 

四、源碼下載地址:

 

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

相關文章
相關標籤/搜索