• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡(jiǎn)單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            在vs2008下編譯eMule-VeryCD工程

            Posted on 2009-08-22 17:51 S.l.e!ep.¢% 閱讀(1198) 評(píng)論(0)  編輯 收藏 引用 所屬分類: VC

            2008-09-04

            版權(quán)聲明 :轉(zhuǎn)載時(shí)請(qǐng)以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
            http://jiangliwei.blogbus.com/logs/28509863.html

            代碼來源:
            官方eMule-VeryCD源碼包
            http://download.verycd.com/eMule-VeryCD-src.rar
            編譯好的第三方庫(kù),來http://www.verycd.com/groups/eMuleDev/209863.topic
            http://download.VeryCD.com/emule071112_libsForVS2005.rar

            編譯環(huán)境:
            WindowsXPsp3CN
            VC2008EN + SP1
            ATL Server??????? ????????http://www.codeplex.com/AtlServer

            修改過程:(只修改error的部分,警告看著不爽自己整)
            1. 解壓縮源碼包,其中src目錄下為emule源碼。
            2. vs2008打開emule.sln,首先是轉(zhuǎn)換工程向?qū)ВD(zhuǎn)換之。
            3. 首次build,會(huì)提示你如下錯(cuò)誤。
            1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(631) : error C2059: syntax error : '<L_TYPE_raw>'
            1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(631) : error C2238: unexpected token(s) preceding ';'
            1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(635) : error C2059: syntax error : '<L_TYPE_raw>'
            1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(635) : error C2238: unexpected token(s) preceding ';'


            這個(gè)錯(cuò)誤是由于WINVER定義不正確造成的,編輯stdafx.h,更改代碼如下:
            #ifndef WINVER
            #define WINVER 0x0501
            #endif

            #ifndef _WIN32_WINNT
            #define _WIN32_WINNT 0x0501
            #endif

            4. 重新build,又會(huì)有一大坨error,其中最多的是
            error C2011: 'tagMENUINFO' : 'struct' type redefinition
            結(jié)構(gòu)重復(fù)定義,查看winuser.h就會(huì)發(fā)現(xiàn)如下定義

            #if(WINVER >= 0x0500)
            ...
            typedef struct tagMENUINFO
            {
            DWORD cbSize;
            DWORD fMask;
            DWORD dwStyle;
            UINT cyMax;
            HBRUSH hbrBack;
            DWORD dwContextHelpID;
            ULONG_PTR dwMenuData;
            } MENUINFO, FAR *LPMENUINFO;
            typedef MENUINFO CONST FAR *LPCMENUINFO;
            還是WINVER的問題,編輯TitleMenu.h,更改代碼如下:
            #if (WINVER < 0x0500)
            typedef struct tagMENUINFO
            {
            DWORD cbSize;
            DWORD fMask;
            DWORD dwStyle;
            UINT cyMax;
            HBRUSH hbrBack;
            DWORD dwContextHelpID;
            ULONG_PTR dwMenuData;
            } MENUINFO, FAR *LPMENUINFO;
            typedef MENUINFO CONST FAR *LPCMENUINFO;
            #endif
            或者直接注釋掉也可以

            5. 重新build(很可能你改完了上面的代碼后,上一次build仍沒有結(jié)束,要毫不猶豫地cancel),再次出現(xiàn)一大坨error,總共有兩類()
            1>.\UPnpNat.cpp(706) : error C2440: '=' : cannot convert from 'const char *' to 'char *'

            1>.\SharedFilesCtrl.cpp(585) : error C2039: 'bWin95' : is not a member of 'AUX_DATA'
            1> C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(54) : see declaration of 'AUX_DATA'
            1>SearchListCtrl.cpp
            1>.\SearchListCtrl.cpp(1729) : error C2039: 'bWin95' : is not a member of 'AUX_DATA'
            1> C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\..\src\mfc\afximpl.h(54) : see declaration of 'AUX_DATA'


            其中第一個(gè)很好改,強(qiáng)制轉(zhuǎn)換類型即可。
            至于第二種錯(cuò)誤,AUX_DATA中已不再包含成員bWin95,如有需要參與運(yùn)算的部分則bWin95=0,具體請(qǐng)自行g(shù)oogle。
            這個(gè)改起來也很容易,將所有bWin95的部分注釋掉即可,其多半是參與if判斷,需要的地方統(tǒng)統(tǒng)取FALSE即可。涉及到的文件共有14個(gè)

            修改舉例
            lf.lfQuality = afxData.bWin95 ? NONANTIALIASED_QUALITY : ANTIALIASED_QUALITY;
            改為
            lf.lfQuality = ANTIALIASED_QUALITY;

            if (!afxData.bWin95 && iItem >= 0)
            改為
            if (iItem >= 0)

            6. 改好之后再次build,出現(xiàn)4條error
            >.\EncryptedStreamSocket.cpp(361) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
            1>.\EncryptedStreamSocket.cpp(492) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
            1>.\EncryptedStreamSocket.cpp(590) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

            1>.\Emule.cpp(314) : fatal error C1189: #error : "You are using an MFC version which may require a special version of the above function!"

            前三條純粹是寫法不正確,變量前面竟然沒有寫類型,為之一一補(bǔ)充上即可。
            第二種是宏警告,意思是VS版本不正確之類的。在其前面的條件中補(bǔ)充上
            || _MFC_VER==0x0900
            即可,總共有2處

            7. 再次build,這次出現(xiàn)的錯(cuò)誤算是比較常見的,不再列舉
            去掉stdafx.h里的以下幾行
            #ifndef _USE_32BIT_TIME_T
            #define _USE_32BIT_TIME_T
            #endif

            8. build, 提示link錯(cuò)誤
            ResizableLib.lib(ResizableDialog.obj) : error LNK2019: unresolved external symbol "public: class CMenu * __thiscall CWnd::GetMenu(void)const " (?GetMenu@CWnd@@QBEPAVCMenu@@XZ) referenced in function "protected: int __thiscall CResizableDialog::OnCreate(struct tagCREATESTRUCTW *)" (?OnCreate@CResizableDialog@@IAEHPAUtagCREATESTRUCTW@@@Z)
            ResizableLib.lib(ResizableSheet.obj) : error LNK2001: unresolved external symbol "public: class CMenu * __thiscall CWnd::GetMenu(void)const " (?GetMenu@CWnd@@QBEPAVCMenu@@XZ)
            ResizableLib.lib(ResizableSheet.obj) : error LNK2019: unresolved external symbol "public: long __thiscall CWnd::SendMessageW(unsigned int,unsigned int,long)" (?SendMessageW@CWnd@@QAEJIIJ@Z) referenced in function "public: void __thiscall CResizableSheet::RefreshLayout(void)" (?RefreshLayout@CResizableSheet@@QAEXXZ)

            這里說明一下,emule的源碼目錄中,其他幾個(gè)像ResizableLib,crypto51是其所依賴的第三方庫(kù),跟emule工程一樣需要重新轉(zhuǎn)換并編譯。但是為了省事起見,這里直接使用了他人編譯好的lib庫(kù)(在前面有說明)。但是盡管如此,有一部分還是需要重新編譯一下的。
            需要重新轉(zhuǎn)換并編譯ResizableLib這個(gè)工程,然后在工程屬性里面將Debug和Release的”Chartacter Set“設(shè)置為“Use Unicode Character Set”,rebuild之后將生成的ResizableLib.lib分別copy至DebugUnicode和ReleaseUnicode目錄(修改工程屬性直接生成到這兩個(gè)目錄里也是一樣的)。
            再次編譯emule工程即可通過。

            另外需補(bǔ)充一點(diǎn),VS2008如果沒裝sp1補(bǔ)丁有一個(gè)地方遍不過去,因?yàn)閼械貌椋揖秃雎粤恕?br />再有,VS2008默認(rèn)安裝時(shí)沒有包括ATLServer庫(kù)(現(xiàn)在已開源)的,需要去官方下載,解壓后制定inc的路徑即可。

            至此大功告成,其余的部分請(qǐng)自行研究吧。我也是剛剛開始看emule的源碼,因?yàn)楸椴贿^去無法調(diào)試,很不爽,所以多花了點(diǎn)時(shí)間研究一下,如果有什么不正確或需要補(bǔ)充的地方請(qǐng)與我聯(lián)系。

            收藏到:Del.icio.us

            韩国无遮挡三级久久| 一级做a爱片久久毛片| 久久久国产打桩机| 亚洲色欲久久久综合网东京热| 亚洲国产精品18久久久久久| 狠狠色丁香久久综合五月| 久久精品亚洲欧美日韩久久| 99久久精品九九亚洲精品| 午夜精品久久久久久| 中文字幕精品久久久久人妻| 伊人久久精品无码av一区| 国内精品久久久久久久涩爱| 无码久久精品国产亚洲Av影片| 久久久久久综合一区中文字幕| 中文字幕无码久久久| 99久久精品国产高清一区二区| 三级韩国一区久久二区综合| 国产精品久久久久久久| 国内高清久久久久久| 欧美久久亚洲精品| 久久99国产精品成人欧美| 久久久久久亚洲精品成人 | 国产精品va久久久久久久| 亚洲国产一成久久精品国产成人综合 | 国产成人精品综合久久久| 久久人人爽人人爽人人AV| 免费一级欧美大片久久网| 欧美一区二区精品久久| 国产一级做a爰片久久毛片| 久久精品中文騷妇女内射| 久久婷婷是五月综合色狠狠| 热综合一本伊人久久精品| 日韩AV毛片精品久久久| 久久中文字幕视频、最近更新| 精品久久久无码中文字幕| 狠狠色综合久久久久尤物 | 久久精品国产第一区二区三区 | 亚洲伊人久久精品影院| 亚洲午夜久久久久妓女影院| 久久99精品久久久久久动态图| 久久精品aⅴ无码中文字字幕不卡|