我用vs2005编译wince5.0板子的程序,调用windows.h 出现下面错误,怎么回事

>D:\ProgramFiles\WindowsCETools\wce500\Unxx\include\ARMV4I\winnt.h(2976):errorC2061:s... >D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winnt.h(2976) : error C2061: syntax error : identifier 'PCONTEXT'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winnt.h(2977) : error C2059: syntax error : '}'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(1405) : error C2061: syntax error : identifier 'LPCONTEXT'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(1405) : error C2059: syntax error : ';'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2089) : error C2146: syntax error : missing ')' before identifier 'lpContext'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2089) : error C2081: 'LPCONTEXT' : name in formal parameter list illegal
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2089) : error C2061: syntax error : identifier 'lpContext'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2089) : error C2059: syntax error : ';'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2090) : error C2059: syntax error : ')'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2097) : error C2143: syntax error : missing ')' before '*'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2097) : error C2143: syntax error : missing '{' before '*'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(2098) : error C2059: syntax error : ')'
1>.\src\ssbMgr.c(232) : error C2065: 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' : undeclared identifier
1>.\src\ssbMgr.c(274) : error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
1>.\src\ssbMgr.c(276) : error C2065: 'strcat_instead_use_StringCbCatA_or_StringCchCatA' : undeclared identifier
1>ROMPatchSettings.c
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winnt.h(2976) : error C2061: syntax error : identifier 'PCONTEXT'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winnt.h(2977) : error C2059: syntax error : '}'
1>D:\Program Files\Windows CE Tools\wce500\Unxx\include\ARMV4I\winbase.h(1405) : error C2061: syntax error : identifier 'LPCONTEXT'
展开
 我来答
百度网友906779cfc
2012-09-27 · TA获得超过522个赞
知道小有建树答主
回答量:363
采纳率:0%
帮助的人:438万
展开全部
这个问题看着内容很多,其实可能问题要改动的很少,但是要找到地方却是很难的,这么多问题,什么少个逗号星号什么的这么多,一般是宏定义顺序不对,由此可能是头文件包含顺序不对,或者#if #else #endif 和#ifdef #ifndef这些开关的逻辑不对,当然如果你犯了括号不匹配的问题我就只能无语了,这个你只能一步步回溯了,如,你先看winnt.h,'PCONTEXT'在哪里,为什么没有定义,你这显示是在2976,应该是个结构体类型,那么是这个结构体类型没被定义,你再去看这个,是被什么宏开关控制了,再跟这个宏开关,等等,看到最后你会发现某个宏定义在一个文件里面,但是这个文件的位置在后面,导致某结构无法识别,所以你要把头文件提前,具体的只能你自己找了
给你个例子
a.h
#ifdef BBB
typedef struct a{
int x;
}STRCT_A;
#endif

b.h
#define BBB

c.c
#include "a.h"
#include "b.h"
#ifdef BBB
STRCT_A sa = {0};
#endif

这里c里面肯定编译失败,因为你先include a.h,然后发现没有定义BBB,所以没有STRCT_A这个结构,然后你又include b.h,所以在c里面有STRCT_A sa = {0};这行,然后就不认识STRCT_A,所以后面就有各种错了 ,解决的方法就是在c.c里include的顺序换一下就可以了
追问
winnt.h 是微软给的标准头文件,里面确实有开关去控制,比如说#if defined (_ARM_),我没在其他地方发现这个宏的定义,难道是环境变量?该怎么去设置
追答
ARM是一种编译器,如果你是使用arm编译器编译的,那么这个宏就是定义了的,一般来说标准头文件不会有问题,出现这种问题一般是你自己include标准头文件的时候顺序不对或者有些需要include的文件没有添加进来,如果你自己的文件不多,你可以尝试看看哪些包括了系统头文件的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式