gpt4 book ai didi

c++ - '_WIN32_WINNT'/'WINVER' : macro redefinition

转载 作者:可可西里 更新时间:2023-11-01 09:57:53 29 4
gpt4 key购买 nike

我有一个 VS2015 C++ 项目。应用程序必须在 Windows 7 和 XP 上运行。所以,我想将 _WIN32_WINNTWINVER 设置为 _WIN32_WINNT_WINXP

这是我项目的 stdafx.h 的样子:

stdafx.h

#pragma once

#include "targetver.h"

#define _WIN32_WINNT _WIN32_WINNT_WINXP
#define WINVER _WIN32_WINNT_WINXP

#include <WinSDKVer.h>

// Windows Header Files:
#include <windows.h>

编译时,我看到以下警告/错误:

stdafx.h(12): error C2220: warning treated as error - no 'object' file generated
1>stdafx.h(12): warning C4005: '_WIN32_WINNT': macro redefinition
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\SDKDDKVer.h(197): note: see previous definition of '_WIN32_WINNT'
1>stdafx.h(13): warning C4005: 'WINVER': macro redefinition
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\SDKDDKVer.h(212): note: see previous definition of 'WINVER'

最佳答案

因为 #include "targetver.h"包括 <sdkddkver.h>当构建环境尚未定义常量 _WIN32_WINNT 和 WINVER 时,它已经定义了常量。

事实上,自动生成的 targetver.h告诉你如何解决这个问题:

#pragma once

// Including SDKDDKVer.h defines the highest available Windows platform.

// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.

#include <SDKDDKVer.h>

简单的解决方案。只需在包含 targetver.h 之前定义这些常量.您可能必须使用 XP 的实际文字值,因为您没有包含定义

的头文件

像这样:

// x501 is XP
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501

#include "targetver.h"
#include <windows.h>

关于c++ - '_WIN32_WINNT'/'WINVER' : macro redefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41376557/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com