版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VS2010编译Gh0st3.6 (一)Vs编译Gh0st修改的工作量还是挺大的,毕竟从VC6.0移植到VS2010平台,已经是一个很大的跨越了,VS2010相对于VC6.0也改进了不止一点了。Gh0st3.6使用了第三方界面库CJ60Lib,目前这个库只支持到VC6.0,而其后的版本已经商业化,所以使用VS2010编译Gh0st的时候,需要重新编译CJ60Lib。VS2010的自带安装的Windows SDK已经到了7.1版,也不需要像VC6.0那样需要下载Windows SDK,并配置环境了。VC6.0支持的最高版本的Windows SDK 是Windows 2003的,而VS2010自带
2、的7.1版已经到了Windows Server 2008 了,其中发生的变化也是很大的。下面具体来操作一次。先列一下几个主要下文件路径。用的是Gh0s3.6原版,硬盘锁代码已经注释。E:ProgrammingVS2010Gh0st3.6 E:ProgrammingVS2010Gh0st3.6gh0st.dsw E:ProgrammingVS2010Gh0st3.6gh0stCJ60Lib E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJ60Lib.dsw E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib一编译C
3、J60Lib库直接用VS2010打开CJ60Lib.dsw进行转换。一共有7个,有4个是已经不存在的项目了,直接删掉。在灰色的项目上点右键Remove,或直接按Del键删除。1.1编译CJ60StaticLib直接在CJ60StaticLib项目上点右键 Project Only - Build Only CJ60StaticLib或者是 Rebuild Only CJ60StaticLib。以后说编译某个项目也是这样,不再重复说明了。1.1.1首先修改程序配置,让默认的字符都为ANSI字符,VS2010默认为宽字符Unicode版。项目右键属性C/C+LanguageWChar_tNo,如图
4、所示:修改编译后,对照错误,再来一个一个的修改。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: 无法打开包括文件:“.srcafximpl.h”: No such file or directory双击这个错误,定位到 stdafx.h 中的#include <
5、.srcafximpl.h> 把这句话改成 #include <.srcmfcafximpl.h>1.1.3接着修改warning C4819警告warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失这个警告至需要双击打开该文件,然后保存就可以了。1.1.4gh0st3.6gh0stcj60libcj60libsubclass.cpp(117): error C2065: “p”: 未声明的标识符这是因为VS更符号C+标准,临时变量的作用域已经修正了,在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”: 未声明的标识符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+)这样的错误修改,以后不再写出,因为实在是太多了,修改方法也很简单。1.1.5gh0st3.6gh0stcj60libcj60libcoolmenu.cpp(76): error C4430: 缺少类型说明符 假定为 int。注意: C+ 不支持默认 int在VC6.0里,用修饰符申明的变量可以不现式的写出变量类型,默认类型为int。如这里的const CXGAP = 1
8、; 等于 const int CXGAP = 1; 但是VS2010必须现式的指出,不能省略。所以修改方法就是现式的写上定义类型。/ 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这个在Gh0st里有,以后这个错误也不在指出。1.1.6接下来要解决的就是一大堆的重定义错误了1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(126): error C2011: “tagSFBS_FLAGS”:“enum”类型重定义1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(126) : 参见“tagSFBS_FLAGS”的声明1>c:program filesmicrosoft sdkswindowsv7.0ainc
11、ludeshlwapi.h(251): error C2084: 函数“HRESULT SHLocalStrDupW(LPCWSTR,LPWSTR *)”已有主体 1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(250) : 参见“SHLocalStrDupW”的前一个定义1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(256): error C2084: 函数“HRESULT SHLocalStrDupA(LPCSTR,LPSTR *)
12、”已有主体1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(255) : 参见“SHLocalStrDupA”的前一个定义1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(860): error C2365: “URL_SCHEME_INVALID”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(860) : 参见“URL_SCH
13、EME_INVALID”的声明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(861): error C2365: “URL_SCHEME_UNKNOWN”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(861) : 参见“URL_SCHEME_UNKNOWN”的声明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(862): e
14、rror C2365: “URL_SCHEME_FTP”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(862) : 参见“URL_SCHEME_FTP”的声明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(863): error C2365: “URL_SCHEME_HTTP”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0a
15、includeshlwapi.h(863) : 参见“URL_SCHEME_HTTP”的声明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(864): error C2365: “URL_SCHEME_GOPHER”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(864) : 参见“URL_SCHEME_GOPHER”的声明1>c:program filesmicrosoft sdkswindows
16、v7.0aincludeshlwapi.h(865): error C2365: “URL_SCHEME_MAILTO”: 重定义;以前的定义是“枚举数”1> c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(865) : 参见“URL_SCHEME_MAILTO”的声明1>c:program filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(866): error C2365: “URL_SCHEME_NEWS”: 重定义;以前的定义是“枚举数”1> c:prog
17、ram filesmicrosoft sdkswindowsv7.0aincludeshlwapi.h(866) : 参见“URL_SCHEME_NEWS”的声明造成这个原因是ATL和CJLIB库的兼容性问题上,从错误上看是shlwapi.h里的代码被重定义了,ATL在定义前都会判断一下是否已经定义,而CJLIB则没有判断。解决方法是把CJLIB中的shlwapi.h包含给注释掉。可以在当前项目搜索shlwapi.h,一共有两处。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibIncludeModulVer.h E:ProgrammingVS2010Gh0st3.
18、6gh0stCJ60LibIncludeShellTree.h把其中的 #include <Shlwapi.h> 改成 /#include <Shlwapi.h> 重新编译后,错误一下少了很多,看起来也清爽了许多。1.1.7gh0st3.6gh0stcj60libcj60libcjsizedockbar.cpp(89): error C2440: “static_cast”: 无法从“UINT (_thiscall CCJSizeDockBar:* )(CPoint)”转换为“LRESULT (_thiscall CWnd:* )(CPoint)” 1> 从基类型
19、到派生类型的强制转换需要 dynamic_cast 或 static_cast这句话定位到的是ON_WM_NCHITTEST(),其实就是消息响应函数的返回值类型不匹配,这里也可以看出VS2010和VC6.0的不同。ON_WM_NCHITTEST对应的消息函数是UINT CCJSizeDockBar:OnNcHitTest(CPoint point) ,把返回值类型改下就好了。有两处: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); 后面还有一个一样的错误,只是所在类不一样,修改方法还是一样的gh0st3.6gh0stcj60libcj60libcjcontrolbar.cpp(155): error C2440:
21、 “static_cast”: 无法从“UINT (_thiscall CCJControlBar:* )(CPoint)”转换为“LRESULT (_thiscall CWnd:* )(CPoint)” 1> 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast这里就不再说了,请参考上面的修改。VS2010编译Gh0st3.6 (一)续1.1.8gh0st3.6gh0stcj60libcj60libcjpagerctrl.cpp(75): error C2440: “static_cast”: 无法从“BOOL (_thiscall CCJPagerC
22、trl:* )(NMPGSCROLL *,LRESULT *)”转换为“BOOL (_thiscall CCmdTarget:* )(NMHDR *,LRESULT *)” 1> 在匹配目标类型的范围内没有具有该名称的函数 gh0st3.6gh0stcj60libcj60libcjpagerctrl.cpp(76): error C2440: “static_cast”: 无法从“BOOL (_thiscall CCJPagerCtrl:* )(NMPGCALCSIZE *,LRESULT *)”转换为“BOOL (_thiscall CCmdTarget:* )(NMHDR *,LRE
23、SULT *)” 1> 在匹配目标类型的范围内没有具有该名称的函数这两处的错误都是一样的,都是同一种参数类型不匹配。定位信息:ON_NOTIFY_REFLECT_EX(PGN_SCROLL, OnPagerScroll) ON_NOTIFY_REFLECT_EX(PGN_CALCSIZE, OnPagerCalcSize)可以看出他们所对应的函数分别是OnPagerScroll和OnPagerCalcSize。直接在上面按F12(右键跳转到定义处)就跳转到函数定义出了。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) =接着修改头文件中申明的参数类型 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每一个项目都需要做的,以后的操作中不再提起,请注意。如果提示A函数和W函数重定义,参数冲突等,都是这个问题,改下项目属性就能解决了。这个直接编译就能过了。用VS2010编译函数很多安全函数的警告,这个不用管他,想修改也是可以的。还有一个_WIN32_WINNT宏未定义的警告,如非必要,我就不加上去了,尽量的保持和原版的相同。要加的话,直接加在每个项目的StdAfx.h里面。格式:#define _WIN32_WINNT
28、0×0500 这里的参数含义可以参看MSDN,后面有一处修改必须加,也会再次提到。VS2010编译Gh0st3.6(二)二编译Gh0st成功编译CJ60Lib界面库之后,就可以开始编译Gh0st了。2.1 转换Gh0st3.6项目直接用VS2010打开Gh0st3.6gh0st.dsw 提示转换项目,确定转换就行了。这里一共三个项目:gh0st,install,svchost。编译的时候需要先编译svchost再编译install,最后才编译gh0st。 2.2 编译svchost相同的错误修改就不再说了,参看前面的修改方法。 修改已说过的错误,再继续下面的错误修改。2.2.11&g
29、t;commonFileManager.cpp(202): error C2440: “初始化”: 无法从“const char *”转换为“char *” 1> 转换丢失限定符char *lpExt = strrchr(lpFile, .); 修改为: const char *lpExt = strrchr(lpFile, .); 1>e:programmingvs2010gh0st3.6serversvchostcommonloop.h(160): error C2440: “=”: 无法从“const char *”转换为“char *” 1> 转换丢失限定符char
30、*lpFileName = NULL; lpFileName = strrchr(lpURL, /) + 1; 修改为:const char *lpFileName = NULL; lpFileName = strrchr(lpURL, /) + 1; 2.2.21>commonScreenSpy.cpp(355): error C2062: 意外的类型“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: 缺少类型说明符 假定为 int。注意: C+ 不支持默认 int定位在: static dwLastScreen = GetTickCount(); 这个错误前面已经提到过,是添加现式定义类型int。这里添加现式类型为 DWORD 比较好,因为后面的函数GetTickCount返回值是DWORD类型。在这里修改如下: static DWORD dwLastScreen = GetTickCount(); 2.2.41>commonScreenManager.c
32、pp(7): fatal error C1083: 无法打开包括文件:“winable.h”: No such file or directoryWinable头文件从VS2008里面就已经不存在了,MSDN里描述如下:从 Visual Studio 早期版本升级项目时,您可能必须修改 WINVER 和 _WIN32_WINNT 宏,以便它们大于或等于 0×0500。 已移除 Windows API 头文件 Winable.h。而改为包括 Winuser.h。因为Winuser默认已经包含进来了,所以直接注释这句话就行了。但是如果直接这样,引用Winable中的函数就会出现未定义错误
33、。所以这里除了需要注释这个头文件包含,还需要注释这个文件中的_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这个能直接编译通过,就算不修改默认字符集,但还是建议和前面一样,修改下默然字符。2.4 编译gh0st一开始编译就会有个错误提示而终止,如果不修改没法正常编译。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这个还是需要修改属性页。需要把代码生成里的运行时库改成/MT。如图:修改之后重新编译就能看到很多错误了。在继续下面的错误修改之前,先把前面讲到的错误类型给修改好。2.4.11>controlBtnST.cpp(4): fatal error C1083: 无法打开包括文件:“stdafx.h”: No such file or directory提示找不到stdafx.h,其实这个文件是存在的。在属性里添加“./”的包含目录就能解决了
36、。 在属性页的C/C+GeneralAdditional Include Directories 里添加。原来的是: CJ60lib/Include;./common;%(AdditionalIncludeDirectories)修改后为: ./;CJ60lib/Include;./common;%(AdditionalIncludeDirectories)如图:2011-06-30 16:38 VS2010编译Gh0st3.6(二)续2.4.21>e:programmingvs2010gh0st3.6gh0stTmSchema.h(27): error C2011: “BGTYPE”:
37、“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(14) : 参见“BGTYPE”的声明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(33): error C2011: “IMAGELAYOUT”:“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(25) : 参见“IMAGELAYOUT”的声明 1>e:programmingvs201
38、0gh0st3.6gh0stTmSchema.h(38): error C2011: “BORDERTYPE”:“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(35) : 参见“BORDERTYPE”的声明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(44): error C2011: “FILLTYPE”:“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludev
39、ssym32.h(46) : 参见“FILLTYPE”的声明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(52): error C2011: “SIZINGTYPE”:“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(59) : 参见“SIZINGTYPE”的声明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(58): error C2011: “HALIGN”:“enum”类型重定义 1&g
40、t; C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(70) : 参见“HALIGN”的声明 1>e:programmingvs2010gh0st3.6gh0stTmSchema.h(64): error C2011: “CONTENTALIGNMENT”:“enum”类型重定义 1> C:Program FilesMicrosoft SDKsWindowsv7.0Aincludevssym32.h(81) : 参见“CONTENTALIGNMENT”的声明 1>e:programmingvs2010gh0s
41、t3.6gh0stTmSchema.h(70): error C2011: “VALIGN”:“enum”类型重定义又是一堆的类型重定义错误,这次需要现式的指出Windows版本才能解决这个问题。打开stdafx.h,在其中添加 #define _WIN32_WINNT 0×0500 。下面是我的操作,实际放置的位置可以自己调整。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> 这里就说下参数的含义,0×0500是指Windows 2000,这个宏定义说明这个程序只是要在Windows 2000 及以上的操作系统上才能正常运行。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、”: 无法从“void (_thiscall CTrueColorToolBar:* )(NMTOOLBARA *,LRESULT *)”转换为“void (_thiscall CCmdTarget:* )(NMHDR *,LRESULT *)” 1> 在匹配目标类型的范围内没有具有该名称的函数这个和1.1.8是一样的。这里再说下。定位到: ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)可以在OnToolbarDropDown上点右键跳转到定义(F12),跳转到申明(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就只有这些错误了。下一节将讲解连接错误。VS2010编译Gh0st3.6(三)三解决连接错误到现在为止,所以代码已经没有任
47、何错误了,但在Gh0st还是编译不成功,而错误全部是在连接错误上。下面来解决掉这些链接错误。3.1 CJ60StaticLib链接库错误首先我们看到的是CJ60StaticLib的链接错误1>CJ60StaticLib.lib(CJListView.obj) : error LNK2001: 无法解析的外部符号 “protected: static struct AFX_MSGMAP const CListView:messageMap” ()1>CJ60StaticLib.lib(CJListView.obj) : error LNK2001: 无法解析的外部符号 “public
48、: _thiscall CString:CString(void)” ()1>CJ60StaticLib.lib(CJListCtrl.obj) : error LNK2001: 无法解析的外部符号 “public: _thiscall CString:CString(void)” ()1>CJ60StaticLib.lib(CJListView.obj) : error LNK2019: 无法解析的外部符号 “public: void _thiscall CString:Empty(void)” (?EmptyCStringQAEXXZ),该符号在函数 “public: _thi
49、scall CCJListView:CCJListView(void)” (?0CCJListViewQAEXZ) 中被引用1>CJ60StaticLib.lib(CJListCtrl.obj) : error LNK2001: 无法解析的外部符号 “public: void _thiscall CString:Empty(void)” (?EmptyCStringQAEXXZ)从错误上看,gh0st链接的是CJ60StaticLib.lib库,但是前面我们编译的CJ60StaticLib产生的库却是CJ60StaticLibd.lib,是CJ60StaticLib的Debug版本的库,
50、这里链接的却是Release版的库。不信可以看下CJ60StaticLib的生成目录:E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib看些日期也就知道,我们前面编译的文件名后面都多了d。从新打开CJ60StaticLib项目。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibCJ60LibCJ60Lib.sln可以直接在界面上的修改成Release,或在项目属性里点配置成Release。如下图:或者:修改后如果直接这样编译,会出现类似下面的错误:1>ShellPidl.cpp(220): error C2664: “Mult
51、iByteToWideChar”: 不能将参数 5 从“USHORT *”转换为“LPWSTR”1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换一看就知道是默认字符集问题,前面只在Debug模式下修改了默认不是WChar_t类型,而切换到Release模式也要记得修改。重新修改,编译CJ60StaticLib和CJ60Lib。再来看下生成目录。E:ProgrammingVS2010Gh0st3.6gh0stCJ60LibLib3.2 gh0st链接错误现在再来编译一次gh0st,链接错误是不是没有出现在CJ60StaticLib上了1>C:Program FilesMSBuildMicrosoft.Cppv4.0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年个人股份转让与清算服务协议范本4篇
- 2025年离婚手续办理与婚姻解除后财产清算及分配合同3篇
- 2025年度个人与银行消费贷款合同(二零二五版)4篇
- 建设工程勘察设计合同(2篇)
- 初三学习策略讲解模板
- 二零二五年度智能设备模具定制加工合同范本4篇
- 音乐核心素养课程设计
- 二零二五年度门诊药品销售权承包合作协议3篇
- 配电柜拆除施工方案
- 造价管理课程设计
- 小学数学六年级解方程练习300题及答案
- 电抗器噪声控制与减振技术
- 中医健康宣教手册
- 2024年江苏扬州市高邮市国有企业招聘笔试参考题库附带答案详解
- 消费医疗行业报告
- 品学课堂新范式
- GB/T 1196-2023重熔用铝锭
- 运输行业员工岗前安全培训
- 公路工程安全风险辨识与防控手册
- 幼儿园教师培训:计数(数数)的核心经验
- 如何撰写和发表高水平的科研论文-good ppt
评论
0/150
提交评论