最近一个人把公司核心项目(基于MFC)从VC6转到了VC10(VC2010),遇到了很多的问题,这里把一些难搞定的问题简单说一下。
- Error MIDL2025: syntax error : expecting a type specification near “ULONG_PTR”。这是一个比较难搞明白的问题,要看你对COM是否比较了解(?)。导致该问题的一个原因是你的工程中包含了一个从老旧版本的Windows SDK里拷贝过来的basetsd.h文件(该头文件不在%INCLUDE%中)。解决的办法就使用Windows SDK v7中的basetsd.h。
- Error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CSomeclass::*)(WPARAM,LPARAM)’ to ‘LRESULT (__thiscall CWnd::*)(WPARAM,LPARAM)’。修改你的消息响应函数的返回值类型为LRESULT。原因是VC6使用的是C风格的强制类型转换,而VC2010使用的是static_cast。
- error C2663: ‘ATL:CSimpleStringT<BaseType>::GetBuffer’ : 2 overloads have no legal conversion for ‘this’ pointer。把GetBuffer改成GetString。
- error LNK2019: unresolved external symbol xGetMonitorInfo@8 referenced in function….。移除头文件<multimon.h>。这个头文件已经用不到了。
- time_t长度问题。VC10默认64位了而VC6是32位。你可能需要定义宏:_USE_32BIT_TIME_T。
这些大概是比较花时间的,剩下的问题就主要是体力活了。比方说for语句的修改。另外就是,VC6的工程可能会因为某些原因而使用了IPTypes.h等头文件,但这些文件可能是从某个Windows(Platform) SDK中拷贝过来的。这也会导致编译期的一些问题。只要把这些头文件引用改成VS自带的就可以了。