VS2010編譯Gh0st3.6_第1頁(yè)
VS2010編譯Gh0st3.6_第2頁(yè)
VS2010編譯Gh0st3.6_第3頁(yè)
VS2010編譯Gh0st3.6_第4頁(yè)
VS2010編譯Gh0st3.6_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VS2010編譯Gh0st3.6 (一)Vs編譯Gh0st修改的工作量還是挺大的,畢竟從VC6.0移植到VS2010平臺(tái),已經(jīng)是一個(gè)很大的跨越了,VS2010相對(duì)于VC6.0也改進(jìn)了不止一點(diǎn)了。Gh0st3.6使用了第三方界面庫(kù)CJ60Lib,目前這個(gè)庫(kù)只支持到VC6.0,而其后的版本已經(jīng)商業(yè)化,所以使用VS2010編譯Gh0st的時(shí)候,需要重新編譯CJ60Lib。VS2010的自帶安裝的Windows SDK已經(jīng)到了7.1版,也不需要像VC6.0那樣需要下載Windows SDK,并配置環(huán)境了。VC6.0支持的最高版本的Windows SDK 是Windows 2003的,而VS2010自帶

2、的7.1版已經(jīng)到了Windows Server 2008 了,其中發(fā)生的變化也是很大的。下面具體來(lái)操作一次。先列一下幾個(gè)主要下文件路徑。用的是Gh0s3.6原版,硬盤(pán)鎖代碼已經(jīng)注釋。E:ProgrammingVS2010Gh0st3.6 E:ProgrammingVS2010Gh0st3.6gh0st.dsw E:ProgrammingVS2010Gh0st3.6gh0stCJ60Lib E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJ60Lib.dsw E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib一編譯C

3、J60Lib庫(kù)直接用VS2010打開(kāi)CJ60Lib.dsw進(jìn)行轉(zhuǎn)換。一共有7個(gè),有4個(gè)是已經(jīng)不存在的項(xiàng)目了,直接刪掉。在灰色的項(xiàng)目上點(diǎn)右鍵Remove,或直接按Del鍵刪除。1.1編譯CJ60StaticLib直接在CJ60StaticLib項(xiàng)目上點(diǎn)右鍵 Project Only - Build Only CJ60StaticLib或者是 Rebuild Only CJ60StaticLib。以后說(shuō)編譯某個(gè)項(xiàng)目也是這樣,不再重復(fù)說(shuō)明了。1.1.1首先修改程序配置,讓默認(rèn)的字符都為ANSI字符,VS2010默認(rèn)為寬字符Unicode版。項(xiàng)目右鍵屬性C/C+LanguageWChar_tNo,如圖

4、所示:修改編譯后,對(duì)照錯(cuò)誤,再來(lái)一個(gè)一個(gè)的修改。1.1.21> stdafx.cpp 1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h) 1>e:programmingvs2010gh0st3.6gh0stcj60libcj60libstdafx.h(51): fatal error C1083: 無(wú)法打開(kāi)包括文件:“.srcafximpl.h”: No such file or directory雙擊這個(gè)錯(cuò)誤,定位到 stdafx.h 中的#include <

5、.srcafximpl.h> 把這句話改成 #include <.srcmfcafximpl.h>1.1.3接著修改warning C4819警告warning C4819: 該文件包含不能在當(dāng)前代碼頁(yè)(936)中表示的字符。請(qǐng)將該文件保存為 Unicode 格式以防止數(shù)據(jù)丟失這個(gè)警告至需要雙擊打開(kāi)該文件,然后保存就可以了。1.1.4gh0st3.6gh0stcj60libcj60libsubclass.cpp(117): error C2065: “p”: 未聲明的標(biāo)識(shí)符這是因?yàn)閂S更符號(hào)C+標(biāo)準(zhǔn),臨時(shí)變量的作用域已經(jīng)修正了,在Gh0st里,可以看到很多這樣的代碼。只要把在

6、for或if里面定義的變量,放到for或if之前定義就好了。這里的代碼是:for (CSubclassWnd* p = theHookMap.Lookup(m_hWnd); p; p=p->m_pNext)修改為CSubclassWnd* p = NULL; for (p = theHookMap.Lookup(m_hWnd); p; p=p->m_pNext) 后面的i也是一樣修改。gh0st3.6gh0stcj60libcj60libcoolmenu.cpp(803): error C2065: “i”: 未聲明的標(biāo)識(shí)符for (i=0; i < nFound; i+)

7、這里的i,是在前面的 for (UINT i=0; i< nItem; i+) 里面定義的,只要把for里面的i放到for之前定義就可以了,修改如下:UINT i=0; for (i=0; i< nItem; i+)這樣的錯(cuò)誤修改,以后不再寫(xiě)出,因?yàn)閷?shí)在是太多了,修改方法也很簡(jiǎn)單。1.1.5gh0st3.6gh0stcj60libcj60libcoolmenu.cpp(76): error C4430: 缺少類(lèi)型說(shuō)明符 假定為 int。注意: C+ 不支持默認(rèn) int在VC6.0里,用修飾符申明的變量可以不現(xiàn)式的寫(xiě)出變量類(lèi)型,默認(rèn)類(lèi)型為int。如這里的const CXGAP = 1

8、; 等于 const int CXGAP = 1; 但是VS2010必須現(xiàn)式的指出,不能省略。所以修改方法就是現(xiàn)式的寫(xiě)上定義類(lèi)型。/ constants used for drawing const CXGAP = 1; / num pixels between button and text const CXTEXTMARGIN = 2; / num pixels after hilite to start text const CXBUTTONMARGIN = 2; / num pixels wider button is than bitmap const CYBUTTONMARGIN

9、= 2; / ditto for height 修改如下: / constants used for drawing const int CXGAP = 1; / num pixels between button and text const int CXTEXTMARGIN = 2; / num pixels after hilite to start text const int CXBUTTONMARGIN = 2; / num pixels wider button is than bitmap const int CYBUTTONMARGIN = 2; / ditto for he

10、ight這個(gè)在Gh0st里有,以后這個(gè)錯(cuò)誤也不在指出。1.1.6接下來(lái)要解決的就是一大堆的重定義錯(cuò)誤了1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(126): error C2011: “tagSFBS_FLAGS”:“enum”類(lèi)型重定義1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(126) : 參見(jiàn)“tagSFBS_FLAGS”的聲明1>c:program filesmicrosoft sdkswindowsv7.0ainc

11、ludeshlwapi.h(251): error C2084: 函數(shù)“HRESULT SHLocalStrDupW(LPCWSTR,LPWSTR *)”已有主體 1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(250) : 參見(jiàn)“SHLocalStrDupW”的前一個(gè)定義1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(256): error C2084: 函數(shù)“HRESULT SHLocalStrDupA(LPCSTR,LPSTR *)

12、”已有主體1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(255) : 參見(jiàn)“SHLocalStrDupA”的前一個(gè)定義1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(860): error C2365: “URL_SCHEME_INVALID”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(860) : 參見(jiàn)“URL_SCH

13、EME_INVALID”的聲明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(861): error C2365: “URL_SCHEME_UNKNOWN”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(861) : 參見(jiàn)“URL_SCHEME_UNKNOWN”的聲明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(862): e

14、rror C2365: “URL_SCHEME_FTP”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(862) : 參見(jiàn)“URL_SCHEME_FTP”的聲明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(863): error C2365: “URL_SCHEME_HTTP”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0a

15、includeshlwapi.h(863) : 參見(jiàn)“URL_SCHEME_HTTP”的聲明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(864): error C2365: “URL_SCHEME_GOPHER”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(864) : 參見(jiàn)“URL_SCHEME_GOPHER”的聲明1>c:program filesmicrosoft sdkswindows

16、v7.0aincludeshlwapi.h(865): error C2365: “URL_SCHEME_MAILTO”: 重定義;以前的定義是“枚舉數(shù)”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(865) : 參見(jiàn)“URL_SCHEME_MAILTO”的聲明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(866): error C2365: “URL_SCHEME_NEWS”: 重定義;以前的定義是“枚舉數(shù)”1> c:prog

17、ram filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(866) : 參見(jiàn)“URL_SCHEME_NEWS”的聲明造成這個(gè)原因是ATL和CJLIB庫(kù)的兼容性問(wèn)題上,從錯(cuò)誤上看是shlwapi.h里的代碼被重定義了,ATL在定義前都會(huì)判斷一下是否已經(jīng)定義,而CJLIB則沒(méi)有判斷。解決方法是把CJLIB中的shlwapi.h包含給注釋掉。可以在當(dāng)前項(xiàng)目搜索shlwapi.h,一共有兩處。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibIncludeModulVer.h E:ProgrammingVS2010Gh0st3.

18、6gh0stCJ60LibIncludeShellTree.h把其中的 #include <Shlwapi.h> 改成 /#include <Shlwapi.h> 重新編譯后,錯(cuò)誤一下少了很多,看起來(lái)也清爽了許多。1.1.7gh0st3.6gh0stcj60libcj60libcjsizedockbar.cpp(89): error C2440: “static_cast”: 無(wú)法從“UINT (_thiscall CCJSizeDockBar:* )(CPoint)”轉(zhuǎn)換為“LRESULT (_thiscall CWnd:* )(CPoint)” 1> 從基類(lèi)型

19、到派生類(lèi)型的強(qiáng)制轉(zhuǎn)換需要 dynamic_cast 或 static_cast這句話定位到的是ON_WM_NCHITTEST(),其實(shí)就是消息響應(yīng)函數(shù)的返回值類(lèi)型不匹配,這里也可以看出VS2010和VC6.0的不同。ON_WM_NCHITTEST對(duì)應(yīng)的消息函數(shù)是UINT CCJSizeDockBar:OnNcHitTest(CPoint point) ,把返回值類(lèi)型改下就好了。有兩處:E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJSizeDockBar.cpp UINT CCJSizeDockBar:OnNcHitTest(CPoint poi

20、nt) 修改為: LRESULT CCJSizeDockBar:OnNcHitTest(CPoint point) E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibIncludeCJSizeDockBar.h afx_msg UINT OnNcHitTest(CPoint point); 修改為: afx_msg LRESULT OnNcHitTest(CPoint point); 后面還有一個(gè)一樣的錯(cuò)誤,只是所在類(lèi)不一樣,修改方法還是一樣的gh0st3.6gh0stcj60libcj60libcjcontrolbar.cpp(155): error C2440:

21、 “static_cast”: 無(wú)法從“UINT (_thiscall CCJControlBar:* )(CPoint)”轉(zhuǎn)換為“LRESULT (_thiscall CWnd:* )(CPoint)” 1> 從基類(lèi)型到派生類(lèi)型的強(qiáng)制轉(zhuǎn)換需要 dynamic_cast 或 static_cast這里就不再說(shuō)了,請(qǐng)參考上面的修改。VS2010編譯Gh0st3.6 (一)續(xù)1.1.8gh0st3.6gh0stcj60libcj60libcjpagerctrl.cpp(75): error C2440: “static_cast”: 無(wú)法從“BOOL (_thiscall CCJPagerC

22、trl:* )(NMPGSCROLL *,LRESULT *)”轉(zhuǎn)換為“BOOL (_thiscall CCmdTarget:* )(NMHDR *,LRESULT *)” 1> 在匹配目標(biāo)類(lèi)型的范圍內(nèi)沒(méi)有具有該名稱的函數(shù) gh0st3.6gh0stcj60libcj60libcjpagerctrl.cpp(76): error C2440: “static_cast”: 無(wú)法從“BOOL (_thiscall CCJPagerCtrl:* )(NMPGCALCSIZE *,LRESULT *)”轉(zhuǎn)換為“BOOL (_thiscall CCmdTarget:* )(NMHDR *,LRE

23、SULT *)” 1> 在匹配目標(biāo)類(lèi)型的范圍內(nèi)沒(méi)有具有該名稱的函數(shù)這兩處的錯(cuò)誤都是一樣的,都是同一種參數(shù)類(lèi)型不匹配。定位信息:ON_NOTIFY_REFLECT_EX(PGN_SCROLL, OnPagerScroll) ON_NOTIFY_REFLECT_EX(PGN_CALCSIZE, OnPagerCalcSize)可以看出他們所對(duì)應(yīng)的函數(shù)分別是OnPagerScroll和OnPagerCalcSize。直接在上面按F12(右鍵跳轉(zhuǎn)到定義處)就跳轉(zhuǎn)到函數(shù)定義出了。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJPagerCtrl.cp

24、p BOOL CCJPagerCtrl:OnPagerScroll(NMPGSCROLL* pNMPGScroll, LRESULT* pResult) *pResult = 0; return FALSE; / Let parent handle message 修改如下: BOOL CCJPagerCtrl:OnPagerScroll(NMHDR* pNMPGScroll, LRESULT* pResult) *pResult = 0; return FALSE; / Let parent handle message = BOOL CCJPagerCtrl:OnPagerCalcSize

25、(NMPGCALCSIZE* pNMPGCalcSize, LRESULT* pResult) switch(pNMPGCalcSize->dwFlag) 修改如下: BOOL CCJPagerCtrl:OnPagerCalcSize(NMHDR* pNMHDRPGCalcSize, LRESULT* pResult) NMPGCALCSIZE *pNMPGCalcSize = (NMPGCALCSIZE *)pNMHDRPGCalcSize; switch(pNMPGCalcSize->dwFlag) =接著修改頭文件中申明的參數(shù)類(lèi)型 E:ProgrammingVS2010Gh0

26、st3.6gh0stCJ60LibIncludeCJPagerCtrl.h virtual BOOL OnPagerScroll(NMPGSCROLL* pNMPGScroll, LRESULT * pResult); virtual BOOL OnPagerCalcSize(NMPGCALCSIZE * pNMPGCalcSize, LRESULT* pResult); 修改如下: virtual BOOL OnPagerScroll(NMPGSCROLL* pNMPGScroll, LRESULT * pResult); virtual BOOL OnPagerCalcSize(NMHDR

27、* pNMHDRPGCalcSize, LRESULT* pResult);1.2 編譯CJ60Lib首先還是修改字符集為ANSI,默然不為WChar_t。這步是編譯Gh0st每一個(gè)項(xiàng)目都需要做的,以后的操作中不再提起,請(qǐng)注意。如果提示A函數(shù)和W函數(shù)重定義,參數(shù)沖突等,都是這個(gè)問(wèn)題,改下項(xiàng)目屬性就能解決了。這個(gè)直接編譯就能過(guò)了。用VS2010編譯函數(shù)很多安全函數(shù)的警告,這個(gè)不用管他,想修改也是可以的。還有一個(gè)_WIN32_WINNT宏未定義的警告,如非必要,我就不加上去了,盡量的保持和原版的相同。要加的話,直接加在每個(gè)項(xiàng)目的StdAfx.h里面。格式:#define _WIN32_WINNT

28、0×0500 這里的參數(shù)含義可以參看MSDN,后面有一處修改必須加,也會(huì)再次提到。VS2010編譯Gh0st3.6(二)二編譯Gh0st成功編譯CJ60Lib界面庫(kù)之后,就可以開(kāi)始編譯Gh0st了。2.1 轉(zhuǎn)換Gh0st3.6項(xiàng)目直接用VS2010打開(kāi)Gh0st3.6gh0st.dsw 提示轉(zhuǎn)換項(xiàng)目,確定轉(zhuǎn)換就行了。這里一共三個(gè)項(xiàng)目:gh0st,install,svchost。編譯的時(shí)候需要先編譯svchost再編譯install,最后才編譯gh0st。 2.2 編譯svchost相同的錯(cuò)誤修改就不再說(shuō)了,參看前面的修改方法。 修改已說(shuō)過(guò)的錯(cuò)誤,再繼續(xù)下面的錯(cuò)誤修改。2.2.11&g

29、t;commonFileManager.cpp(202): error C2440: “初始化”: 無(wú)法從“const char *”轉(zhuǎn)換為“char *” 1> 轉(zhuǎn)換丟失限定符char *lpExt = strrchr(lpFile, .); 修改為: const char *lpExt = strrchr(lpFile, .); 1>e:programmingvs2010gh0st3.6serversvchostcommonloop.h(160): error C2440: “=”: 無(wú)法從“const char *”轉(zhuǎn)換為“char *” 1> 轉(zhuǎn)換丟失限定符char

30、*lpFileName = NULL; lpFileName = strrchr(lpURL, /) + 1; 修改為:const char *lpFileName = NULL; lpFileName = strrchr(lpURL, /) + 1; 2.2.21>commonScreenSpy.cpp(355): error C2062: 意外的類(lèi)型“int”for (int i = 0, int nToJump = 0; i < nHeight; i += nToJump) 修改為: for (int i = 0, nToJump = 0; i < nHeight; i

31、 += nToJump) 2.2.31>commonVideoManager.cpp(123): error C4430: 缺少類(lèi)型說(shuō)明符 假定為 int。注意: C+ 不支持默認(rèn) int定位在: static dwLastScreen = GetTickCount(); 這個(gè)錯(cuò)誤前面已經(jīng)提到過(guò),是添加現(xiàn)式定義類(lèi)型int。這里添加現(xiàn)式類(lèi)型為 DWORD 比較好,因?yàn)楹竺娴暮瘮?shù)GetTickCount返回值是DWORD類(lèi)型。在這里修改如下: static DWORD dwLastScreen = GetTickCount(); 2.2.41>commonScreenManager.c

32、pp(7): fatal error C1083: 無(wú)法打開(kāi)包括文件:“winable.h”: No such file or directoryWinable頭文件從VS2008里面就已經(jīng)不存在了,MSDN里描述如下:從 Visual Studio 早期版本升級(jí)項(xiàng)目時(shí),您可能必須修改 WINVER 和 _WIN32_WINNT 宏,以便它們大于或等于 0×0500。 已移除 Windows API 頭文件 Winable.h。而改為包括 Winuser.h。因?yàn)閃inuser默認(rèn)已經(jīng)包含進(jìn)來(lái)了,所以直接注釋這句話就行了。但是如果直接這樣,引用Winable中的函數(shù)就會(huì)出現(xiàn)未定義錯(cuò)誤

33、。所以這里除了需要注釋這個(gè)頭文件包含,還需要注釋這個(gè)文件中的_WIN32_WINNT宏定義,或者修改宏定義大于等于500。我這里直接注釋掉了。#define _WIN32_WINNT 0×0400 #include "ScreenManager.h" #include "until.h" #include <winable.h> / BlockInput 修改為: /#define _WIN32_WINNT 0×0400 #include "ScreenManager.h" #include "

34、;until.h" /#include <winable.h> / BlockInput 2.3 編譯install這個(gè)能直接編譯通過(guò),就算不修改默認(rèn)字符集,但還是建議和前面一樣,修改下默然字符。2.4 編譯gh0st一開(kāi)始編譯就會(huì)有個(gè)錯(cuò)誤提示而終止,如果不修改沒(méi)法正常編譯。1>C:Program FilesMicrosoft Visual Studio 10.0VCatlmfcincludeafx.h(24): fatal error C1189: #error : Building MFC application with /MDd (CRT dll versi

35、on) requires MFC shared dll version. Please #define _AFXDLL or do not use /MDd這個(gè)還是需要修改屬性頁(yè)。需要把代碼生成里的運(yùn)行時(shí)庫(kù)改成/MT。如圖:修改之后重新編譯就能看到很多錯(cuò)誤了。在繼續(xù)下面的錯(cuò)誤修改之前,先把前面講到的錯(cuò)誤類(lèi)型給修改好。2.4.11>controlBtnST.cpp(4): fatal error C1083: 無(wú)法打開(kāi)包括文件:“stdafx.h”: No such file or directory提示找不到stdafx.h,其實(shí)這個(gè)文件是存在的。在屬性里添加“./”的包含目錄就能解決了

36、。 在屬性頁(yè)的C/C+GeneralAdditional Include Directories 里添加。原來(lái)的是: CJ60lib/Include;./common;%(AdditionalIncludeDirectories)修改后為: ./;CJ60lib/Include;./common;%(AdditionalIncludeDirectories)如圖:2011-06-30 16:38 VS2010編譯Gh0st3.6(二)續(xù)2.4.21>e:programmingvs2010gh0st3.6gh0stTmSchema.h(27): error C2011: “BGTYPE”:

37、“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(14) : 參見(jiàn)“BGTYPE”的聲明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(33): error C2011: “IMAGELAYOUT”:“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(25) : 參見(jiàn)“IMAGELAYOUT”的聲明 1>e:programmingvs201

38、0gh0st3.6gh0stTmSchema.h(38): error C2011: “BORDERTYPE”:“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(35) : 參見(jiàn)“BORDERTYPE”的聲明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(44): error C2011: “FILLTYPE”:“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludev

39、ssym32.h(46) : 參見(jiàn)“FILLTYPE”的聲明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(52): error C2011: “SIZINGTYPE”:“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(59) : 參見(jiàn)“SIZINGTYPE”的聲明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(58): error C2011: “HALIGN”:“enum”類(lèi)型重定義 1&g

40、t; C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(70) : 參見(jiàn)“HALIGN”的聲明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(64): error C2011: “CONTENTALIGNMENT”:“enum”類(lèi)型重定義 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(81) : 參見(jiàn)“CONTENTALIGNMENT”的聲明 1>e:programmingvs2010gh0s

41、t3.6gh0stTmSchema.h(70): error C2011: “VALIGN”:“enum”類(lèi)型重定義又是一堆的類(lèi)型重定義錯(cuò)誤,這次需要現(xiàn)式的指出Windows版本才能解決這個(gè)問(wèn)題。打開(kāi)stdafx.h,在其中添加 #define _WIN32_WINNT 0×0500 。下面是我的操作,實(shí)際放置的位置可以自己調(diào)整。E:ProgrammingVS2010Gh0st3.6gh0stStdAfx.h#define VC_EXTRALEAN / Exclude rarely-used stuff from Windows headers #include <afxwin

42、.h> / MFC core and standard components #include <afxext.h> / MFC extensions #include <afxcview.h> 修改如下: #define VC_EXTRALEAN / Exclude rarely-used stuff from Windows headers #define _WIN32_WINNT 0×0500 #include <afxwin.h> / MFC core and standard components #include <afxe

43、xt.h> / MFC extensions #include <afxcview.h> 這里就說(shuō)下參數(shù)的含義,0×0500是指Windows 2000,這個(gè)宏定義說(shuō)明這個(gè)程序只是要在Windows 2000 及以上的操作系統(tǒng)上才能正常運(yùn)行。0×0501 Windows XP、0×0502 Windows Server 2003、 0×0600 Windows Vista、0×0601 Windows 7。2.4.31>TrueColorToolBar.cpp(42): error C2440: “static_cast

44、”: 無(wú)法從“void (_thiscall CTrueColorToolBar:* )(NMTOOLBARA *,LRESULT *)”轉(zhuǎn)換為“void (_thiscall CCmdTarget:* )(NMHDR *,LRESULT *)” 1> 在匹配目標(biāo)類(lèi)型的范圍內(nèi)沒(méi)有具有該名稱的函數(shù)這個(gè)和1.1.8是一樣的。這里再說(shuō)下。定位到: ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)可以在OnToolbarDropDown上點(diǎn)右鍵跳轉(zhuǎn)到定義(F12),跳轉(zhuǎn)到申明(Ctrl+Alt+F12)E:ProgrammingVS2010Gh

45、0st3.6gh0stTrueColorToolBar.cppvoid CTrueColorToolBar:OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr) for (int i = 0; i < m_lstDropDownButton.GetSize(); i+) 修改如下:void CTrueColorToolBar:OnToolbarDropDown(NMHDR* NMHDRpnmtb, LRESULT *plr) NMTOOLBARA *pnmtb = (NMTOOLBARA *)NMHDRpnmtb; for (int i =

46、0; i < m_lstDropDownButton.GetSize(); i+) E:ProgrammingVS2010Gh0st3.6gh0stTrueColorToolBar.hafx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);修改如下:afx_msg void OnToolbarDropDown(NMHDR* NMHDRpnmtb, LRESULT* plRes); 2.5Gh0st就只有這些錯(cuò)誤了。下一節(jié)將講解連接錯(cuò)誤。VS2010編譯Gh0st3.6(三)三解決連接錯(cuò)誤到現(xiàn)在為止,所以代碼已經(jīng)沒(méi)有任

47、何錯(cuò)誤了,但在Gh0st還是編譯不成功,而錯(cuò)誤全部是在連接錯(cuò)誤上。下面來(lái)解決掉這些鏈接錯(cuò)誤。3.1 CJ60StaticLib鏈接庫(kù)錯(cuò)誤首先我們看到的是CJ60StaticLib的鏈接錯(cuò)誤1>CJ60StaticLib.lib(CJListView.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) “protected: static struct AFX_MSGMAP const CListView:messageMap” ()1>CJ60StaticLib.lib(CJListView.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) “public

48、: _thiscall CString:CString(void)” ()1>CJ60StaticLib.lib(CJListCtrl.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) “public: _thiscall CString:CString(void)” ()1>CJ60StaticLib.lib(CJListView.obj) : error LNK2019: 無(wú)法解析的外部符號(hào) “public: void _thiscall CString:Empty(void)” (?EmptyCStringQAEXXZ),該符號(hào)在函數(shù) “public: _thi

49、scall CCJListView:CCJListView(void)” (?0CCJListViewQAEXZ) 中被引用1>CJ60StaticLib.lib(CJListCtrl.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) “public: void _thiscall CString:Empty(void)” (?EmptyCStringQAEXXZ)從錯(cuò)誤上看,gh0st鏈接的是CJ60StaticLib.lib庫(kù),但是前面我們編譯的CJ60StaticLib產(chǎn)生的庫(kù)卻是CJ60StaticLibd.lib,是CJ60StaticLib的Debug版本的庫(kù),

50、這里鏈接的卻是Release版的庫(kù)。不信可以看下CJ60StaticLib的生成目錄:E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib看些日期也就知道,我們前面編譯的文件名后面都多了d。從新打開(kāi)CJ60StaticLib項(xiàng)目。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJ60Lib.sln可以直接在界面上的修改成Release,或在項(xiàng)目屬性里點(diǎn)配置成Release。如下圖:或者:修改后如果直接這樣編譯,會(huì)出現(xiàn)類(lèi)似下面的錯(cuò)誤:1>ShellPidl.cpp(220): error C2664: “Mult

51、iByteToWideChar”: 不能將參數(shù) 5 從“USHORT *”轉(zhuǎn)換為“LPWSTR”1> 與指向的類(lèi)型無(wú)關(guān);轉(zhuǎn)換要求 reinterpret_cast、C 樣式轉(zhuǎn)換或函數(shù)樣式轉(zhuǎn)換一看就知道是默認(rèn)字符集問(wèn)題,前面只在Debug模式下修改了默認(rèn)不是WChar_t類(lèi)型,而切換到Release模式也要記得修改。重新修改,編譯CJ60StaticLib和CJ60Lib。再來(lái)看下生成目錄。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib3.2 gh0st鏈接錯(cuò)誤現(xiàn)在再來(lái)編譯一次gh0st,鏈接錯(cuò)誤是不是沒(méi)有出現(xiàn)在CJ60StaticLib上了1>C:Program FilesMSBuildMicrosoft.Cppv4.0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論