[VC++]成功實現資源釋放(原創+轉載)

       幾個月前我突然對資源釋放起了濃厚的興趣,於是在網上搜啊搜,內容幾乎被一篇文章這裏面的內容所壟斷了,由於文章上只給了部分源碼,而其他的則需要10分CSDN分去下載,於是我就擱置了幾個月。
      最近又想到這個東西,由於好奇心很重,我還是搜了一下,在http://www.cctry.com/thread-10129-1-1.html網址中找到了一個不用花錢的下載鏈接(你也可以點擊這裏下載),於是我就打開來看看,我沒學過MFC,對那些Dlg函數不感興趣,總算找到了最關鍵的源碼(這一段是網上有的,我現在才知道那個人是把關鍵代碼貼出來了):

/************************************************************************/
/* 函數說明:釋放資源中某類型的文件
/* 參 數:新文件名、資源ID、資源類型
/* 返 回 值:成功返回TRUE,否則返回FALSE
/* By:Koma 2009.07.24 23:30
/************************************************************************/
BOOL 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 );

// 啓動EXE或COPY等後續操作省略
// ......
return TRUE;
}

      新建一個空工程,不管是MFC的還是控制檯的,我選擇的是控制檯工程,然後再新建一個.h文件,加入頭文件:
      #include <stdio.h>
      #include <windows.h>
      #include <afxwin.h>
      最好還加上:
      #include "resource.h"
      先不要問這個resource.h是哪裏來的。
      
      現在,再新建一個.cpp文件,輸入以下內容(複製也可以,[VC++]成功實現資源釋放(原創) - sunnysab - 奮鬥

#include "include.h"
int main()
{
if(ReleaseRes("ABC.exe",(WORD)IDR_EXE1,"EXE"))
{
printf("釋放文件成功!\n");
}
else
{
printf("釋放文件失敗!\n");
}
return 0;
}

      接下來就是資源的問題了,建立一個rc文件(我是點擊資源框中的“版本”,新建版本之後系統會自動爲你創建一個rc文件),結果如下:
[VC++]成功實現資源釋放(原創) - sunnysab - 奮鬥
      右擊空白處,點擊“插入”出現以下界面。
[VC++]成功實現資源釋放(原創) - sunnysab - 奮鬥[VC++]成功實現資源釋放(原創) - sunnysab - 奮鬥

[VC++]成功實現資源釋放(原創) - sunnysab - 奮鬥
 
      因爲我們這次用EXE文件做實驗,所以單擊“Dialog”,然後點擊“引入”,這時會彈出一個文件選擇框(關於如何實現文件選擇,請參見這裏
      選好之後,在框中輸入“EXE”(引號不加),如“自定義資源類型”圖。點擊確定。
      這時候,rc中就會出現你剛纔添加的EXE了。保存rc文件,並且將它添加到工程,再把resource.h添加到工程,然後就可以編譯運行,你就等着”釋放文件成功“這個提示彈出吧!

(注意事項)
      編譯沒問題,但運行後可能會出現
--------------------Configuration: 臨時 - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/臨時.exe : fatal error LNK1120: 2 unresolved externals
執行 link.exe 時出錯.

臨時.exe - 1 error(s), 0 warning(s)
       這個錯誤,解決方案你可以參考http://sunnysab.blog.163.com/blog/static/18037500920129273537269/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章