包含windows.h出错的问题

来源:互联网 发布:lol mac版国服 编辑:程序博客网 时间:2024/04/28 04:27

在win32 console编程中,出现包含windows.h就会报错的情况,具体如下

../vc/platformsdk/include/rpcndr.h(147) : error C2632: “char”后面的“int”非法

../vc/platformsdk/include/rpcndr.h(147) : warning C4091: “typedef ”: 没有声明变量时忽略“unsigned char”的左侧

../vc/platformsdk/include/wtypes.h(1075) : error C2371: “BOOLEAN”: 重定义;不同的基类型       

 ../vc/platformsdk/include/winnt.h(770) : 参见“BOOLEAN”的声明

不知道什么原因,出现了类型重复定义,解决不了,打开windows.h,查找看是否有包含rpcndr.h和wtypes.h这两个头文件,

结果没有发现直接包含这两个头文件,但是发现了如下代码

#ifndef WIN32_LEAN_AND_MEAN

...

#include <rpc.h>

...

#endif

由于rpc.h和rpcndr.h相似,所以我推测rpc.h很可能就是引入rpcndr.h文件的地方,所以

我将代码改为如下,

#define   WIN32_LEAN_AND_MEAN

#include <windows.h>

结果编译通过了,程序执行也没有什么问题。为了搞清是什么原因,打开MSDN,查询宏WIN32_LEAN_AND_MEAN的作用,如下

为加速生成过程,Visual C++ 提供了如下定义(这些定义通过排除一些不太常用的 API,减小了 Win32 头文件的大小):

VC_EXTRALEAN

WIN32_LEAN_AND_MEAN

VC_EXTRALEAN 定义 WIN32_LEAN_AND_MEAN 和若干 NOservice 定义,如 NOCOMM 和 NOSOUND。(有关 NOservice 定义列表,请参见头文件 Windows.h 和 MFC 头文件 afxv_w32.h。)

用 Visual C++ 应用程序向导创建的应用程序自动使用 VC_EXTRALEAN。可以在旧式 MFC 应用程序中手动定义 VC_EXTRALEAN 以加速生成过程。

非 MFC 应用程序可以定义 WIN32_LEAN_AND_MEAN 和适用的 NOservice 定义以减少生成时间。

由于我要用到的win32 api函数都是常见的,所以定义这个宏应该不会有太大影响,问题算是解决了。