最近, 找到一个界面库. 想把它转化为VS2005下编译, 岂知出现了NNNNNNNNN个错误!!!这才恍然大悟: VS2003到VS2005在VC上还是改动了不少!!!下面是对这些变化的总结:
1. 变量作用域 在vc7.1中, 如果一个变量定义在for语句的条件从句中,那么这个变量可以在for之后使用。但Vc8禁止这样,会报告一个C2065错误.
②错误 22 error C3861: “tstrlen”: 找不到标识符 ../guilib1.5/guilib/guitabwnd.cpp 458 *在新的MSDN查不到strlen,使用 _tcslen ③错误 31 error C2664: “strcpy”: 不能将参数 1 从“WCHAR [32]”转换为“char *” ../guilib1.5/guilib/guidocktoolbarex.h 26 改为_tcscpy,*
看来在VS2005中处理字符串时不能再像以前那样直接用C风格的了,还是用T形式的吧,既然strcpy要用_tcscpy,其它的字符串函数估计也只好用_tcsxxx了
此外, 还发现了不少函数声明方面的变化:①ON_WM_NCHITTEST()出现下列错误: 错误 33 error C2440: “static_cast”: 无法从“UINT (__thiscall CGuiControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)” ../guilib1.5/guilib/guicontrolbar.cpp 101
*需要使用LRESULT才行! 这个怎么处理啊?怎么使用LRESULT? ------------------------------------------------------------ ------------------------------就拿这个CGuiControlBar来说,它继承自CWnd,而在VC6.0和VC7.1中,CWnd::OnNCHitTest函数的返回值为UINT(在VC8.0中它的返回值改成了LRESULT),当CGuiControlBar重写(Override)这个OnNCHitTest函数的时候,它的返回值也声明为UINT(因为写代码的时候还是针对VC6.0或VC7.1),当在VC8.0中扩展ON_WM_NCHITTEST()宏时,就会出现上面的错误,所以你需要做的只是把CGuiControlBar::OnNCHitTest的返回值声明为LRESULT即可,它只不过是个LONG_PTR(长指针)。
此外, 还发现了不少函数声明方面的变化:①ON_WM_NCHITTEST()出现下列错误: 错误 33 error C2440: “static_cast”: 无法从“UINT (__thiscall CGuiControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)” ../guilib1.5/guilib/guicontrolbar.cpp 101
*需要使用LRESULT才行! 这个怎么处理啊?怎么使用LRESULT? ------------------------------------------------------------ ------------------------------就拿这个CGuiControlBar来说,它继承自CWnd,而在VC6.0和VC7.1中,CWnd::OnNCHitTest函数的返回值为UINT(在VC8.0中它的返回值改成了LRESULT),当CGuiControlBar重写(Override)这个OnNCHitTest函数的时候,它的返回值也声明为UINT(因为写代码的时候还是针对VC6.0或VC7.1),当在VC8.0中扩展ON_WM_NCHITTEST()宏时,就会出现上面的错误,所以你需要做的只是把CGuiControlBar::OnNCHitTest的返回值声明为LRESULT即可,它只不过是个LONG_PTR(长指针)。