Programming Windows: debug sysmets1.c

本文解决VC++6.0编译Win32 Application时遇到的多个错误和警告,通过定义宏WINVER为0x0500启用Windows NT特定功能,并修复GetSystemMetrics函数调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编辑器是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

另外还有一个地方有错误
GetSystemMetrics (sysmetrics[i].iIndex)
改为
GetSystemMetrics (sysmetrics[i].Index)

以下是对照表:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值