直接编译gh0st控制端源码会提示Cj60的一个库里面函数名找不到 估计是原来的库在VC60下编译 不匹配的问题

找到CJ60文件夹 打开 编译Cj60StaticLib库

1.报错 找不到文件<..\src\afximpl.h>

貌似从VC7开始这个头文件放在\src\mfc下 找到 stdafx.h 改之

#include <..\src\mfc\afximpl.h>

2.error C2440: “static_cast”: 无法从“UINT (__thiscall CCJControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)”

类型定义的问题 把相关参数的函数返回值改成LRESULT

3.error C2440: “static_cast”: 无法从“BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *)”转换为“BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”

宏展开后参数不匹配的问题 把NMPGSCROL改成NMHDR进子程序后强转

LPNMPGSCROL pnmpgs = (LPNMPGSCROL ) pnmhdr;

4.error C2664: “MultiByteToWideChar”: 不能将参数 5 从“USHORT *”转换为“LPWSTR”

这个是从某一版本以后 wchar_t开始变成编译器内置类型的问题 几个串类型之间不能默认转换 强转即可

接下来编译控制端gh0st

1.一上来提示找不到stdafx.h 我靠 打开header目录一看 有这个文件 ok 在附加包含目录里面加入“./”  解决了

2.error 2440 和刚才一样的问题 MFC展开宏的问题 进去强转指针即可

3.ok 到这里再编译 能通过了 刚才那一堆link错误 由于我们用vc8重新编译了cj60库也解决了 但是多出来几个link错误

nafxcw.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMT.lib(new.obj) 中定义

看意思大概是操作符在几个库里有重定义的问题 试了忽略nafxcw.lib和libcmt.lib 都不行 后翻到一篇帖子 这种问题需要在附加依赖项里面指定一下链接的先后顺序即可 先链接nafxcw.lib 后链接libcmt.lib 如果编译调试版在库后面加个d

好了 甩个服务端到虚拟机上去 咱们开始调试吧

参考文献:

http://topic.csdn.net/t/20030627/23/1966751.html

operator new 链接重定义的问题

http://blog.csdn.net/orbit/archive/2008/11/28/3405309.aspx

从VC6到VC9移植代码问题总结

本文相关评论 - 1条评论都没有呢

目前还没有评论.