Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67120
  • 博文数量: 19
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-13 16:29
文章分类

全部博文(19)

文章存档

2010年(9)

2009年(10)

我的朋友

分类: WINDOWS

2010-08-02 15:19:28

为什么要这样定义呢,经“考证后”得到结论:  

#if WINVER>=0x0500

...

#define SM_MOUSEWHEELPRESENT ... //打个比方

...

#endif

 

所以如果没有定义WINVER或者WINVER<0x0500

#if WINVER>=0x0500

...

#endif

之间的代码就没有编译,也就是说这时编译器就看不到这些代码

所以要定义#define WINVER 0x0500 

看了这个稍微明白了点了 

编辑器是VC++6.0

建立 Win32 Application

 

在编译时出现如下错误:

 

--------------------Configuration: sysmets1 - Win32 Debug--------------------

Compiling...

sysmets1.c

e:"test"sysmets1"sysmets.h(297) : error C2065: 'SM_MOUSEWHEELPRESENT' : undeclared identifier

e:"test"sysmets1"sysmets.h(297) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(297) : warning C4047: 'initializing' : 'int ' differs in levels of indirection from 'char [21]'

e:"test"sysmets1"sysmets.h(301) : error C2065: 'SM_XVIRTUALSCREEN' : undeclared identifier

e:"test"sysmets1"sysmets.h(301) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(303) : warning C4047: 'initializing' : 'int ' differs in levels of indirection from 'char [24]'

e:"test"sysmets1"sysmets.h(305) : error C2065: 'SM_YVIRTUALSCREEN' : undeclared identifier

e:"test"sysmets1"sysmets.h(305) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(309) : error C2065: 'SM_CXVIRTUALSCREEN' : undeclared identifier

e:"test"sysmets1"sysmets.h(309) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(309) : warning C4047: 'initializing' : 'int ' differs in levels of indirection from 'char [19]'

e:"test"sysmets1"sysmets.h(313) : error C2065: 'SM_CYVIRTUALSCREEN' : undeclared identifier

e:"test"sysmets1"sysmets.h(313) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(315) : warning C4047: 'initializing' : 'int ' differs in levels of indirection from 'char [22]'

e:"test"sysmets1"sysmets.h(317) : error C2065: 'SM_CMONITORS' : undeclared identifier

e:"test"sysmets1"sysmets.h(317) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(321) : error C2065: 'SM_SAMEDISPLAYFORMAT' : undeclared identifier

e:"test"sysmets1"sysmets.h(321) : error C2099: initializer is not a constant

e:"test"sysmets1"sysmets.h(321) : warning C4047: 'initializing' : 'int ' differs in levels of indirection from 'char [21]'

Error executing cl.exe.

 

sysmets1.obj - 14 error(s), 5 warning(s)

 

解决方法:

 

那些是WindowNT里才能使用的常量,它是是被条件编译的。

需要在的sysmets.cpp文件的最前面加一句

#define WINVER 0x0500

 

Minimum System Required Macros to Define

Windows 95 and

Windows NT 4.0 WINVER=0x0400

Windows 98 and

Windows NT 4.0 _WIN32_WINDOWS=0x0410 and WINVER=0x0400

Windows NT 4.0 _WIN32_WINNT=0x0400 and WINVER=0x0400

Windows 98 _WIN32_WINDOWS=0x0410

Windows 2000 _WIN32_WINNT=0x0500 and WINVER=0x0500

Windows Me _WIN32_WINDOWS=0x049

 

阅读(1300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~