afxcomctl32.h与afxcomctl32.inl报错

编译公司一个几年前的老项目,是从VC6.0升级到VS2005的。

1.编译时报缺少头文件,于是附件包含目录,于是出现了以下报错:

1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2059: 语法错误 : “__stdcall”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2091: 函数返回函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2146: 语法错误 : 缺少“;”(在标识符“p”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2061: 语法错误 : 标识符“Ptr”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2805: 二进制“operator =”的参数太少
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2333: “CComCtlWrapper::DSA_Create_Type::operator =”: 函数声明中有错误;跳过函数体
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2143: 语法错误 : 缺少“;”(在“->”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2833: “operator Ptr”不是可识别的运算符或类型
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2059: 语法错误 : “newline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2334: “{”的前面有意外标记;跳过明显的函数体
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2146: 语法错误 : 缺少“;”(在标识符“_DSA_Create”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : warning C4183: “_DSA_Create”: 缺少返回类型;假定为返回“int”的成员函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(296) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(296) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(297) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(297) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(298) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(298) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(299) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(299) : error C2061: 语法错误 : 标识符“HDSA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2059: 语法错误 : “__stdcall”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2091: 函数返回函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2146: 语法错误 : 缺少“;”(在标识符“p”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2061: 语法错误 : 标识符“Ptr”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2805: 二进制“operator =”的参数太少
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2333: “CComCtlWrapper::DPA_Create_Type::operator =”: 函数声明中有错误;跳过函数体
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2143: 语法错误 : 缺少“;”(在“->”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2833: “operator Ptr”不是可识别的运算符或类型
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2059: 语法错误 : “newline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2334: “{”的前面有意外标记;跳过明显的函数体
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2146: 语法错误 : 缺少“;”(在标识符“_DPA_Create”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : warning C4183: “_DPA_Create”: 缺少返回类型;假定为返回“int”的成员函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(301) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(301) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(302) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(302) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(303) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(303) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(304) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(304) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(305) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(305) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(306) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(306) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(307) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(307) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(308) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(308) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(309) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(309) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(310) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(310) : error C2061: 语法错误 : 标识符“HDPA”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2614: “CComCtlWrapper::DSA_Create_Type”: 非法的成员初始化:“p”不是基或成员
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2065: “p”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2039: “Ptr”: 不是“CComCtlWrapper::DSA_Create_Type”的成员
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : 参见“CComCtlWrapper::DSA_Create_Type”的声明
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2065: “Ptr”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2143: 语法错误 : 缺少“;”(在“GetProcAddress”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2065: “HDSA”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2146: 语法错误 : 缺少“;”(在标识符“result”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2065: “result”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2678: 二进制“!=”: 没有找到接受“CComCtlWrapper::DSA_Create_Type”类型的左操作数的运算符(或没有可接受的转换)
1>XXX\Microsoft Visual Studio 8\VC\PlatformSDK\include\guiddef.h(197): 可能是“int operator !=(const GUID &,const GUID &)”
1>试图匹配参数列表“(CComCtlWrapper::DSA_Create_Type, int)”时
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(295) : error C2064: 项不会计算为接受 2 个参数的函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(296) : error C2065: “hdsa”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(297) : error C2065: “pfnCB”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(297) : error C2065: “pData”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(298) : error C2065: “i”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(299) : error C2065: “pitem”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2614: “CComCtlWrapper::DPA_Create_Type”: 非法的成员初始化:“p”不是基或成员
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2039: “Ptr”: 不是“CComCtlWrapper::DPA_Create_Type”的成员
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : 参见“CComCtlWrapper::DPA_Create_Type”的声明
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2143: 语法错误 : 缺少“;”(在“GetProcAddress”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2065: “HDPA”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2146: 语法错误 : 缺少“;”(在标识符“result”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2678: 二进制“!=”: 没有找到接受“CComCtlWrapper::DPA_Create_Type”类型的左操作数的运算符(或没有可接受的转换)
1>XXX\Microsoft Visual Studio 8\VC\PlatformSDK\include\guiddef.h(197): 可能是“int operator !=(const GUID &,const GUID &)”
1>试图匹配参数列表“(CComCtlWrapper::DPA_Create_Type, int)”时
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(300) : error C2064: 项不会计算为接受 1 个参数的函数
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(301) : error C2065: “hdpa”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(309) : error C2065: “pfnCompare”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(309) : error C2065: “lParam”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(310) : error C2065: “pFind”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(310) : error C2065: “iStart”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.h(310) : error C2065: “options”: 未声明的标识符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxwin.h(3017) : error C2061: 语法错误 : 标识符“PBUTTON_IMAGELIST”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxwin.h(3018) : error C2061: 语法错误 : 标识符“PBUTTON_IMAGELIST”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(94) : error C2143: 语法错误 : 缺少“;”(在“__stdcall”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(94) : error C2433: “HDSA”: 不允许在数据声明中使用“inline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(94) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(94) : error C2371: “HDSA”: 重定义;不同的基类型
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(94) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : error C2146: 语法错误 : 缺少“)”(在标识符“hdsa”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : error C2433: “AfxDSA_Destroy”: 不允许在数据声明中使用“inline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : error C2059: 语法错误 : “)”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(95) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2146: 语法错误 : 缺少“)”(在标识符“hdsa”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2182: “AfxDSA_DestroyCallback”: 非法使用“void”类型
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2433: “AfxDSA_DestroyCallback”: 不允许在数据声明中使用“inline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2059: 语法错误 : “)”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(96) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : error C2146: 语法错误 : 缺少“)”(在标识符“hdsa”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : error C2433: “AfxDSA_GetItemPtr”: 不允许在数据声明中使用“inline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : error C2059: 语法错误 : “)”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(97) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(98) : error C2146: 语法错误 : 缺少“)”(在标识符“hdsa”的前面)
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(98) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(98) : error C2433: “AfxDSA_InsertItem”: 不允许在数据声明中使用“inline”
1>XXX\Microsoft Visual Studio 8\VC\atlmfc\include\afxcomctl32.inl(98) : fatal error C1003: 错误计数超过 100;正在停止编译

2.经过调试分析感觉是#include <afxwin.h>时出错了,但是不知怎么解决,于是到网上找资料

网上说“此问题已经解决,系统版本问题,需要包含这个文件时,先#define WINVER 0x400 包含后在#define WINVER 0x600”

换了系统,换了vs2005版本,加了#define WINVER 0x400、#define WINVER 0x600,但是完全不起作用,于是打算重写此程序。

3.重写程序

重建一个项目是完全可以的,但是要把原来项目中的全部功能移过来是很麻烦的。于是想到在原项目上改,先去掉多余功能,如果没问题再一点点添加功能。

发现当去掉附加包含目录中所有项目不需要的头文件,只保留需要的头文件时,奇迹发生了,程序编译通过,不再有那个错误。

4.总结

这个问题可能是包含了不该包含的某一个头文件,可以通过把不需要的全都去掉试试。反正我是这么解决了,汗!

05-04 04:58