• <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)論
              
            日韩精品无码久久一区二区三| 国产精品伦理久久久久久 | 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 77777亚洲午夜久久多人| 久久久久无码精品| 国产2021久久精品| 久久最新免费视频| 久久婷婷五月综合国产尤物app| 精品无码久久久久国产动漫3d| 少妇久久久久久久久久| 久久久噜噜噜www成人网| 亚洲午夜久久久久妓女影院 | 九九热久久免费视频| 亚洲成色999久久网站| 欧美精品一区二区精品久久| 久久精品视频免费| 夜夜亚洲天天久久| 国产精品热久久毛片| 久久久青草青青国产亚洲免观| 伊人久久大香线蕉av不卡| 韩国免费A级毛片久久| 国产精品综合久久第一页| 精品国产乱码久久久久软件| 97久久精品无码一区二区| 久久精品国产亚洲AV电影| 精品久久久久久| 久久这里只有精品首页| 青青草国产97免久久费观看| 精品一区二区久久| 无码任你躁久久久久久老妇| 久久天天躁狠狠躁夜夜不卡| 久久狠狠高潮亚洲精品| 国产福利电影一区二区三区久久老子无码午夜伦不 | 激情五月综合综合久久69| 久久精品国产一区二区三区| 久久精品aⅴ无码中文字字幕不卡| 热re99久久精品国产99热| 久久性精品| 久久99精品国产99久久6| 国产精品美女久久久久 | 97久久精品国产精品青草|