• <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>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2008年3月>
            2425262728291
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345


            子曾經(jīng)曰過(guò):編程無(wú)他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊(cè)

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911304
            • 排名 - 14

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            今天在給公司網(wǎng)絡(luò)游戲項(xiàng)目的patchupdate程序添加殺木馬的功能時(shí),遇到了問(wèn)題。
            問(wèn)題如下: 我給patchupdate添加殺木馬功能是調(diào)用了一個(gè)dll內(nèi)的函數(shù),我是靜態(tài)鏈接的(就是include這個(gè)函數(shù)的頭文件,鏈接了個(gè).lib。patchupdate程序是先更新本身的,它把自己更新完了就重新啟動(dòng),這時(shí)因?yàn)槠湟蕾嚹莻€(gè)dll,所以報(bào)錯(cuò)“找不到某個(gè)dll”,那肯定沒(méi)法更新下來(lái)那個(gè)dll文件了。

            經(jīng)高手指點(diǎn),用動(dòng)態(tài)鏈接dll的方法成功解決了此問(wèn)題!故寫(xiě)此文以記之!
            下面把幾個(gè)API的使用例子代碼貼出來(lái),方便以后查看,這個(gè)代碼可以在msdn里找到的。
            #include <windows.h> 

            typedef 
            int (*MYPROC)(LPTSTR);

            int _tmain(int argc, _TCHAR* argv[])
            {
                HINSTANCE hinstLib; 
                MYPROC ProcAdd; 
                BOOL fFreeResult, fRunTimeLinkSuccess 
            = FALSE; 

                
            // Get a handle to the DLL module.

                hinstLib 
            = ::LoadLibrary(TEXT("myputs.dll")); 

                
            // If the handle is valid, try to get the function address.

                
            if (hinstLib != NULL) 
                { 
                    ProcAdd 
            = (MYPROC) ::GetProcAddress(hinstLib, "PatchUpdate"); /// 函數(shù) PatchUpdate();

                    
            // If the function address is valid, call the function.

                    
            if (NULL != ProcAdd) 
                    {
                        fRunTimeLinkSuccess 
            = TRUE;
                        (ProcAdd) (TEXT(
            "Message via DLL function\n")); 
                    }

                    
            // Free the DLL module.

                    fFreeResult 
            = ::FreeLibrary(hinstLib); 
                } 

                
            // If unable to call the DLL function, use an alternative.

                
            if (! fRunTimeLinkSuccess) 
                    printf(
            "Message via alternative method\n"); 

                
            return 0;
            }

            2007-10-23
            現(xiàn)在又改成靜態(tài)鏈接的了,因?yàn)閯?dòng)態(tài)鏈接的話,只要把殺木馬的dll干掉就沒(méi)作用了。這樣子沒(méi)了這個(gè)dll就得重新安裝客戶端或者從別的地方拖這個(gè)dll過(guò)來(lái),patchupdate才能啟動(dòng)起來(lái)。
            要把patchupdate用QT寫(xiě)的話,如果要玩家不用重新下載客戶端的話,就得:

            1.把Qt編譯成靜態(tài)庫(kù),patchupdate鏈接用到的靜態(tài)庫(kù)。

            or

            2.改變更新次序,讓patchupdate先更新下Qt的dll下來(lái)(指定這個(gè)更新順序不能寫(xiě)在patchupdate自身里面,得靠srvflist.xml),這樣子的好處是patchupdate本身不會(huì)很大,其他用到Qt的東西也可以與其共享Qt的dll,比如獨(dú)立于客戶端的聊天軟件
                ps:剛才看了下,更新順序是寫(xiě)在patchupdate里面的。所以否定2方法。
            posted on 2007-04-29 02:08 七星重劍 閱讀(1500) 評(píng)論(8)  編輯 收藏 引用 所屬分類: PL--c/c++

            FeedBack:
            # re: 動(dòng)態(tài)鏈接dll 2007-04-30 11:07 wangjs
            基本的概念都有搞清楚,DLL只有隱式或顯式鏈接。  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2007-05-02 00:39 xbx
            樓上的,你才沒(méi)搞清楚呢。本來(lái)就是靜態(tài)和動(dòng)態(tài)兩種,你說(shuō)的那兩種,實(shí)際上就是一樣的東西,不同的叫法。
            BS你。  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2007-05-03 22:43 To Be C++
            @xbx
            這位老兄似乎也不怎么明白啊! 回去再翻翻書(shū)吧!  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2007-05-06 14:48 wangjs
            @xbx
            見(jiàn)不得別人說(shuō)你家小孩嗎?看把你急的。說(shuō)你不對(duì)了就要吃了我試的。  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2007-09-17 08:01 螞蟻終結(jié)者
            也有叫l(wèi)oad-time dynamic linking和run-time dynamic linking,上面的是run-time dynamic linking  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll[未登錄](méi) 2007-10-30 12:20 Daniel
            爭(zhēng)論挺有意思

            我是Gooooooooooooooogle過(guò)來(lái)的,恰巧看到了

            我是這么理解的

            靜態(tài)鏈接是說(shuō) Lib文件里面包含完整的代碼,而不僅僅是說(shuō)幾個(gè)導(dǎo)出函數(shù)
            動(dòng)態(tài)鏈接有兩種方式,顯示和隱式 如果提供一個(gè) Lib和一個(gè).h頭聲明,實(shí)際鏈接之后仍然需要.dll文件就是隱式,LoadLibrary,Get地址,那是顯示。如果是隱式調(diào)用 Windows Shell程序在加載PE文件的時(shí)候會(huì)進(jìn)行關(guān)聯(lián)性文件檢查,如果缺少Dll文件會(huì)提示,如果實(shí)現(xiàn)顯式Load,Get的話,PE文件可以自性檢查加載是否成功。
              回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2008-04-04 19:58 idlqy
            呵呵,是巨人網(wǎng)游吧?能不能做個(gè)免更新的外掛什么的啊?每次都要srvflist.xml更新~~好麻煩的。  回復(fù)  更多評(píng)論
              
            # re: 動(dòng)態(tài)鏈接dll 2008-04-04 21:30 七星重劍
            @idlqy
            巨人更新很頻繁,說(shuō)明開(kāi)發(fā)人員很勤奮啊,是吧?
            當(dāng)然可以不更新就玩,不用外掛也可以  回復(fù)  更多評(píng)論
              
            成人久久免费网站| 久久99国产一区二区三区| 欧美牲交A欧牲交aⅴ久久| 久久精品黄AA片一区二区三区| 国产精品久久久久9999| 久久免费国产精品一区二区| 亚洲色欲久久久久综合网| 欧美亚洲色综久久精品国产| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 色狠狠久久AV五月综合| 日本道色综合久久影院| 亚洲欧洲久久av| 国产精品欧美久久久天天影视| 国产一区二区精品久久凹凸| 国产69精品久久久久APP下载 | 91亚洲国产成人久久精品| 中文字幕精品无码久久久久久3D日动漫 | 品成人欧美大片久久国产欧美...| 香蕉久久久久久狠狠色| 精品久久久久久久久中文字幕| 日本加勒比久久精品| 久久er99热精品一区二区| 久久久久无码中| 国产亚洲色婷婷久久99精品| 亚洲综合久久夜AV | 久久久久久夜精品精品免费啦| 热RE99久久精品国产66热| 久久久久久免费一区二区三区| 久久久无码精品亚洲日韩蜜臀浪潮| 国产精品欧美久久久久无广告| 亚洲精品无码专区久久久 | 超级97碰碰碰碰久久久久最新| 亚洲嫩草影院久久精品| 久久久亚洲欧洲日产国码aⅴ | 97久久精品人人做人人爽| 亚洲国产精品无码久久久蜜芽| 亚洲精品WWW久久久久久| 国产午夜精品久久久久九九电影 | 一本久久a久久精品综合夜夜 | 久久免费线看线看| 国产成人精品免费久久久久|