宏定义 _WIN32_WINNT=0x0400到底往哪加?

wangguanguo 2011-04-16 09:54:37
我最近做程序好几次用到要加#define _WIN32_WINNT 0x0400宏定义。我最先加在一个cpp文件的最开头,在所有include之上,网上很多也这么说,可是没有效果。网上还有说加到project->settings->c/c++ preprocessor definitions里:_WIN32_WINNT=0x0400。可是编译出错:
Command line warning D4024 : unrecognized source file type '_WIN32_WINNT=0x0400', object file assumed
Command line warning D4027 : source file '_WIN32_WINNT=0x0400' ignored
最后看到一篇文章说加到stdafx.h里,

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif

#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
这次好了。
既然网上这么多人都提到前两种方法,那么他应该也管用,不知道大家怎么加?
...全文
704 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangguanguo 2011-04-21
  • 打赏
  • 举报
回复
我后来想了下,加到cpp文件的开头不起作用的原因可能是因为“预编译”这个东西。头文件在没有更改的情况下只编译一次,在头文件的引用之前加上define,并不能使头文件重新编译,那么你的定义也就没有被头文件所使用。
Eleven 2011-04-19
  • 打赏
  • 举报
回复
放到stdafx.h文件中
xiaozhan04 2011-04-19
  • 打赏
  • 举报
回复
stdafx.h或者targetver.h
yiruirui0507 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wltg2001 的回复:]
既然网上这么多人都提到前两种方法,那么他应该也管用,不知道大家怎么加?
===================
你有一点没有弄明白,本来
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
按理说加在任何CPP文件中都是可以的,但是,一般的工程会先包含stdafx.h,而在stdafx.h中,会包含Winbase.h,而在Wi……
[/Quote]
这个我试验过,也可以的
yiruirui0507 2011-04-19
  • 打赏
  • 举报
回复
你可以选择放进stdafx.h或者targetver.h
wangguanguo 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wltg2001 的回复:]

我的stdafx.h没有包含Winbase.h。
======
不是直接包含,而是间接的。
[/Quote]
我通过在项目和vc安装目录的头文件夹下全局查找,Winbase.h在windows.h中被包含,windows.h没有被stdafx.h直接或间接包含。
wltg2001 2011-04-18
  • 打赏
  • 举报
回复
我的stdafx.h没有包含Winbase.h。
======
不是直接包含,而是间接的。
wangguanguo 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lactoferrin 的回复:]

我用project->settings->c/c++ preprocessor definitions里:_WIN32_WINNT=0x0400
没问题
[/Quote]
我今天在vs2008下有测了一下,这次没提示我有错误,我以前是在vc6下加的。可能是版本问题吧。
wangguanguo 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wltg2001 的回复:]

既然网上这么多人都提到前两种方法,那么他应该也管用,不知道大家怎么加?
===================
你有一点没有弄明白,本来
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
按理说加在任何CPP文件中都是可以的,但是,一般的工程会先包含stdafx.h,而在stdafx.h中,会包含Winbase.h,而在W……
[/Quote]
我的stdafx.h没有包含Winbase.h。
wltg2001 2011-04-16
  • 打赏
  • 举报
回复
既然网上这么多人都提到前两种方法,那么他应该也管用,不知道大家怎么加?
===================
你有一点没有弄明白,本来
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
按理说加在任何CPP文件中都是可以的,但是,一般的工程会先包含stdafx.h,而在stdafx.h中,会包含Winbase.h,而在Winbase.h中会定义_WIN32_WINNT,那么你上面定义的
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
就会失效,因为在这个之前已经定义了_WIN32_WINNT了。
所以你应该将它加在stdafx.h的前面。
其实,我觉得你还可以直接打开winbase.h文件,直接将_WIN32_WINNT改掉。
joimson 2011-04-16
  • 打赏
  • 举报
回复
一般都加到stdafx.h。好像还有地方是什么附加选项命令的地方,
Lactoferrin 2011-04-16
  • 打赏
  • 举报
回复
我用project->settings->c/c++ preprocessor definitions里:_WIN32_WINNT=0x0400
没问题
Dreadnought 2011-04-16
  • 打赏
  • 举报
回复
stdafx.h或者targetver.h
King_hhuang 2011-04-16
  • 打赏
  • 举报
回复
加到stdafx.h
这样你的项目中都可以用啦

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧