青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

在VC項目中使用自定義資源



  在VC環(huán)境中除了我們所常用的Dialog、Menu和Bitmap等標準資源類型之外,它還支持自定義資源類型(Custom Resource),我們自定義的資源類型能做些什么呢?呵呵,用處多多。
  1. 默認的皮膚壓縮包或語言包。一些支持換膚的軟件特別是一些媒體播放器常常有自定義的皮膚文件(你可以嘗試將Media Player或千千靜聽等軟件的Skins目錄下的文件的擴展名改為.zip,然后使用WinZip打開看一下),但為了防止Skin文件丟失導致軟件無法顯示,他們常常會在EXE文件中內(nèi)置一套Skin作為默認的皮膚文件。同樣,一些支持多語言的EXE文件中存在默認語言包也是這個道理(當然也可以使用"String Table"資源類型);
  2. 做為一些病毒/木馬程序的寄生方式。如果不小心執(zhí)行了帶有病毒/木馬的程序,它們會在你運行時釋放出病毒/木馬文件。當然許多病毒是將自身寫入PE文件頭來實現(xiàn);
  3. 合并EXE與它所需要的DLL文件。出于某些原因程序作者有時可能需要將DLL文件嵌入到可執(zhí)行的EXE文件中,這可以通過使用自定義資源來實現(xiàn);
  4. 其它需要在程序中播放一個AVI動畫等等,都可以通過將二進制的數(shù)據(jù)文件作為自定義資源加入到可執(zhí)行文件中來實現(xiàn);

二、添加

  添加資源時選擇自定義,IDE會為你生成一個新的二進制資源,然后你就可以將你已經(jīng)存在的二進制文件作為自定義的資源類型導入到項目中來了。

三、使用

  要使用自定義資源,我們可能要用到的幾個API函數(shù)有FindResource、LoadResource和LockResource等,這里每一個函數(shù)的返回值分別作為下一個函數(shù)的參數(shù),我來簡要介紹一下。

  1. FindResource用來在一個指定的模塊中定位所指定的資源:
    HRSRC FindResource(
        HMODULE hModule,		//包含所需資源的模塊句柄,如果是程序本身,可以置為NULL
        LPCTSTR lpName,		//可以是資源名稱或資源ID
        LPCTSTR lpType		//資源類型,在這里也就是我們自己指定的資源類型
        );      
  2. LoadResource用來將所指定的資源加載到內(nèi)存當中;
    HGLOBAL LoadResource(
        HMODULE hModule,		//模塊句柄,同上
        HRSRC hResInfo		//需要加載的資源句柄,這里也就是FindResource的返回值
        );		
  3. LockResource用來鎖定內(nèi)存中的資源數(shù)據(jù)塊,它的返回值也就是我們要使用的直系指向資源數(shù)據(jù)的內(nèi)存指針;
    LPVOID LockResource(
        HGLOBAL hResData		//指向內(nèi)存中要鎖定的資源數(shù)據(jù)塊,這里也就是LoadResource的返回值
        );		
  另外我們還需要用SizeofResource來確定資源的尺寸,我們在操作資源時要用到它。在資源使用完畢后我們不需要使用UnlockResource和FreeResource來手動地釋放資源,因為它們都是16位Windows遺留下來的,在Win32中,在使用完畢后系統(tǒng)會自動回收。它們的使用很簡單,大致上是這個樣子的:
BOOL UseCustomResource()
{
//定位我們的自定義資源,這里因為我們是從本模塊定位資源,所以將句柄簡單地置為NULL即可
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(ITEMID), TEXT("MyType"));
if (NULL == hRsrc)
return FALSE;
//獲取資源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加載資源
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
if (NULL == hGlobal)
return FALSE;
//鎖定資源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
return FALSE;
//我們用剛才得到的pBuffer和dwSize來做一些需要的事情。可以直接在內(nèi)存中使
//用,也可以寫入到硬盤文件。這里我們簡單的寫入到硬盤文件,如果我們的自定
//義資源是作為嵌入DLL來應用,情況可能要復雜一些。
BOOL bRt = FALSE;
FILE* fp = _tfopen(_T("demo.exe"), _T("wb"));
if (fp != NULL)
{
if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
bRt = TRUE;
fclose(fp);
}
//FreeResource(hGlobal);
return bRt;
}      
四、實例

  下面我們準備用自定義資源來做兩件事情:一件是用我們生成的可執(zhí)行文件的自定義資源中來釋放一個Hello World程序(類似于木馬程序釋放服務端);另一件是從自定義資源中解壓縮一個壓縮包(類似于換膚軟件釋放默認的皮膚文件)。這里我們模擬WinZip的Self-Extractor工具的界面和功能來完成它(呵呵,不過請不要誤會,WinZip嵌入到壓縮包的自解壓工具可不是像我們這樣實現(xiàn)的,這里只是來演示一下從自定義資源解壓縮多個文件的一個過程而已),具體的實現(xiàn)可以參考本文所附帶的源代碼。它最終運行起來大概是這么個樣子:


圖四 模仿Self-Extractor界面的運行結(jié)果

  運行后,點擊"Release"按鈕會在當前目錄下釋放一個Win32版的Hello World程序;點擊"Unzip"按鈕則會在指定目錄釋放本Demo的工程文件及項目的所有源代碼,而編譯這個工程則恰恰得到了上面的可執(zhí)行文件。

本工程在WinXP + VC.Net 2003 + WTL7.5環(huán)境下編譯并運行通過。

posted on 2008-04-09 16:16 wrh 閱讀(678) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看一区二区| 在线亚洲+欧美+日本专区| 一区二区欧美精品| 国产伦精品一区二区三区免费 | 免费久久99精品国产自| 一区二区三区精品视频| 欧美亚洲午夜视频在线观看| 亚洲午夜女主播在线直播| 最新国产乱人伦偷精品免费网站| 国产专区一区| 亚洲青涩在线| 亚洲欧洲精品一区二区| 亚洲片在线资源| 国产亚洲欧美一区二区三区| 一区二区亚洲| 国产精品久久久久久久久久三级| 欧美高清你懂得| 亚洲婷婷国产精品电影人久久| 老色鬼精品视频在线观看播放| 欧美一区二区视频97| 欧美一区二视频| 亚洲午夜激情网页| 国产精品99久久99久久久二8 | 欧美视频日韩视频| 欧美中文字幕视频在线观看| 午夜精品久久久久久久99水蜜桃 | 欧美视频在线观看视频极品| 欧美色图首页| 欧美国产视频在线观看| 欧美 日韩 国产在线| 欧美激情欧美狂野欧美精品| 亚洲欧美日韩直播| 欧美a一区二区| 免费成人毛片| 欧美.www| 欧美网站在线| 国产欧美亚洲视频| 精品99一区二区| 国产日韩精品一区二区三区在线| 欧美在线免费观看视频| 久久这里有精品视频| 一区二区三区自拍| 亚洲黄色免费电影| 在线成人激情| 亚洲无限乱码一二三四麻| 亚洲欧美视频在线观看| 欧美在线地址| 欧美日韩精品免费观看| 欧美日韩一级大片网址| 国产中文一区二区| 日韩视频一区二区在线观看| 国产伦精品一区| 精品二区久久| 国产一区二区三区网站| 一本色道88久久加勒比精品| 欧美在线首页| 亚洲精品视频二区| 亚洲激情影院| 性欧美1819sex性高清| 校园春色综合网| 欧美福利视频| 伊人色综合久久天天五月婷| 亚洲综合清纯丝袜自拍| 欧美不卡视频一区| 亚洲伊人久久综合| 欧美 日韩 国产一区二区在线视频| 午夜在线a亚洲v天堂网2018| 久久久精品一区二区三区| 亚洲一区免费看| 免费观看一级特黄欧美大片| 亚洲第一精品福利| 欧美激情久久久| 亚洲成在人线av| 亚洲国产岛国毛片在线| 欧美一区二区在线免费播放| 久久女同互慰一区二区三区| 久久久久久夜精品精品免费| 在线视频欧美一区| 欧美精品尤物在线| 亚洲精品欧美激情| 亚洲国产精品久久久久秋霞影院| 午夜精品婷婷| 亚洲特黄一级片| 欧美日韩蜜桃| 亚洲视频香蕉人妖| 99re6热只有精品免费观看| 亚洲国产高清在线观看视频| 欧美一区二区三区视频在线| 亚洲大胆人体在线| 亚洲人精品午夜在线观看| 午夜视频一区在线观看| 国产欧美午夜| 久久亚洲精品中文字幕冲田杏梨| 欧美中文在线观看| 亚洲精品久久久久久久久| 亚洲国产精品123| 欧美成人免费观看| 99热这里只有成人精品国产| 日韩视频一区二区| 国产精品久久久久久久久| 午夜精品电影| 午夜精品久久久久久久久久久久 | 亚洲伊人一本大道中文字幕| 欧美小视频在线| 欧美中文在线免费| 久久男人资源视频| 国产在线乱码一区二区三区| 久久综合中文色婷婷| 玖玖在线精品| 亚洲少妇自拍| 久久大逼视频| 亚洲国产高清高潮精品美女| 国产精品自在线| 久久婷婷国产综合精品青草| 欧美激情精品久久久| 性欧美长视频| 免费视频最近日韩| 亚洲一区二区三区高清 | 91久久精品国产91久久| 欧美二区在线看| 国产女主播视频一区二区| 亚洲欧美日韩国产| 午夜精品久久久久久久男人的天堂| 国产亚洲成人一区| 亚洲欧洲一区二区天堂久久| 国产精品老牛| 欧美激情一区二区久久久| 国产精品美女诱惑| 欧美成人精品一区二区| 国产精品理论片| 欧美顶级少妇做爰| 国产麻豆综合| 亚洲欧洲视频| 有坂深雪在线一区| 亚洲午夜国产一区99re久久| 亚洲日韩中文字幕在线播放| 欧美国产日韩免费| 久久精品久久综合| 亚洲综合清纯丝袜自拍| 欧美高清视频一二三区| 欧美少妇一区二区| 一区二区欧美在线| 欧美电影在线观看完整版| 亚洲欧美另类综合偷拍| 欧美日韩在线观看一区二区三区 | 久久精品99无色码中文字幕| 一本一本久久a久久精品牛牛影视| 欧美jizzhd精品欧美巨大免费| 久久er99精品| 一区二区三区在线高清| 午夜在线精品偷拍| 久久九九精品| 国产精品高潮呻吟久久| 宅男噜噜噜66一区二区66| 亚洲精品一级| 欧美区在线播放| 亚洲精品一区二区三区不| av成人老司机| 欧美精品电影在线| 99精品免费视频| 欧美在线关看| 久久激情视频久久| 国产精品夜夜嗨| 久久国产色av| 免费成人在线观看视频| 久久亚洲综合| 99视频一区二区三区| 91久久夜色精品国产九色| 国产日韩综合| 欧美午夜不卡影院在线观看完整版免费| 老司机精品导航| 亚洲第一主播视频| 美女网站在线免费欧美精品| 亚洲——在线| 国产精品亚洲综合久久| 欧美成在线视频| 亚洲视频一二| 日韩小视频在线观看| 玉米视频成人免费看| 久久婷婷色综合| 亚洲国产另类久久久精品极度 | 午夜精品国产| 国产精品入口夜色视频大尺度| 美女诱惑黄网站一区| 狠狠噜噜久久| 久久精品国产999大香线蕉| 免费成人性网站| 在线日韩电影| 欧美高清在线视频| 亚洲免费电影在线观看| 西西裸体人体做爰大胆久久久| 国产无遮挡一区二区三区毛片日本| 亚洲欧美www| 一区二区日韩欧美| 国产一区二区无遮挡| 欧美高清在线精品一区| 亚洲在线观看| 亚洲成色精品| 久久av一区二区三区| 久久久久久久成人|