MFC工程中不要#include <windows.h>

afxwin.h头文件 本文件为c++的afxwin头文件,有多个实用函数。 立即下载

【转载两篇文章,不多加描述】

---------------------------------------------------------------------------------------------

【原因分析篇: http://applehxb.blogbus.com/logs/48742135.html】

【处理篇: http://blog.youkuaiyun.com/sunshine1314/article/details/459809】

---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------


【原因分析篇章】

 如果在MFC工程中#include   <windows.h>,那么会有以下编译错误(因为afxwin.h文件中包含了afx.h,afx.h文件中包含了afxver_.h,afxver_.h中包含了afxv_w32.h,而afxv_w32.h中包含了windows.h,请看以下分析):

  compile   error:   
  c:\program   files\microsoft   visual   studio\vc98\mfc\include\afxv_w32.h(14)   :   
  fatal   error   C1189:   #error   :     WINDOWS.H   already   included.     MFC   apps   must   not   #include   <windows.h>   
            
  如果编译器在编译afxv_w32.h文件之前编译了windows.h文件,编译器会报上面的错误,因为在afxv_w32.h文件中有下面的一句预编译报警:   
  #ifdef   _WINDOWS_   
  #error   WINDOWS.H   already   included.     MFC   apps   must   not   #include   <windows.h>   
  #endif   
    
  问题在于为什么afxv_w32.h中要有这么一句预编译处理。看了afxv_w32.h和windows.h文件就有点明白了。   
  在afxv_w32.h中有下面的预编译语句:   
  ...   ...   
  #undef   NOLOGERROR   
  #undef   NOPROFILER   
  #undef   NOMEMMGR   
  #undef   NOLFILEIO   
  #undef   NOOPENFILE   
  #undef   NORESOURCE   
  #undef   NOATOM   
  ...   ...   
  在afxv_w32.h中还有一句:   
  #include   "windows.h"   
    
  而在windows.h文件中有下面的预编译语句:   
  ...   ...   
  #define   NOATOM   
  #define   NOGDI   
  #define   NOGDICAPMASKS   
  #define   NOMETAFILE   
  #define   NOMINMAX   
  #define   NOMSG   
  #define   NOOPENFILE   
  ...   ...   
    
  注意到在windows.h的开头有防止windows.h被重复编译的预编译开关:   
  #ifndef   _WINDOWS_   
  #define   _WINDOWS_   
    
  这样问题就明白了,虽然我不知道微软为什么要这么做,但是我知道如果在afxv_w32.h没有那句预编译报警,那么如果在编译afxv_w32.h之前   
  编译了windows.h,那么在windows.h中#define的NOATOM等宏就会被#undef掉,可能会导致相应的错误发生。   
    
  猜想原因可能如上所述,我的解决方法是,将包含有#include   “windows.h"的头文件放在所有包含的头文件的最后面,这样使得对afxv_w32文件   
  的编译处理发生在先,这样,由于在afxv_w32.h中已经包含了windows.h,那么宏_WINDOWS_将被定义,后继的#include   "windows.h"语句将形同虚设,   
  上面的编译报警也不会发生了。我觉得这种处理要比将所有的#include   "windows.h”语句删掉要好一点。   
    
  一句话,编译器必须在编译windows.h之前编译afxv_w32.h,因为我不是十分清除什么时候afxv_w32.h会被编译,所以我将可能包含有#include   "windows.h"的头文件放在其他头文件之后#include。


---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------


【处理篇】


一、问题由来

 

vc6和vc71的工程向导中都包含非MFC的工程,诸如win32 console project, win32 static library。非MFC工程创建时是不支持MFC特性的,然后我们在处理实际问题时有时会用到MFC相关类,如Cstring, Cedit等等,这是很正常的。可能有人会说,为何不在一开始就创建MFC工程呢?问题在于MFC工程会产生很多向导生成代码,如基于单文档的工程会有View,Doc等类,很多时候我们只需要一个空工程就可以了。

 

 

二、常见问题

非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误,具体如下:

fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>

 

 

三、解决办法

非MFC工程使用MFC库时,可参考以下步骤

1、工程设置中,将MFC的使用由原来的“使用标准windows库”改为“在共享DLL中使用MFC”(VC71)

如果是英文版,相关选项是:

Microsoft Foundation Classes: Use MFC in a shared dll, no using MFC(VC6)

NOTE:因为我用的是中文版的vc71,英文版的vc6.

2、头文件包含

不同的MFC类需包含的头文件是不一样的。

常用的类,如Cstring, Cedit 等,包含afxwin.h就可以了

如果不清楚包含什么头文件的话,可以同msdn进行查询,msdn中,对于MFC类的介绍中,都会给出相应的header file requirement.

3、#include 语句一定要写在首行

这一点很重要,通常出现前面讲到的windows.h重复包含错误,都是因为#include 语句没有写在首行。

另外还要注意的是,如果#include语句是在一个头文件里,那么对应头文件的包含也要写在首行。示例如下:

=============

test.h文件的内容如下:

#include <afxwin.h> //保证该语句在首行

test.cpp的文件内容如下:

#include “test.h” //同样也要保证该语句在首行

=============

ps: 这么做的具体原因我也不知道,我是在实际调试中琢磨出这个道理的。我自己在这个问题上花了很多冤枉时间,写下该篇,就是希望大家不要在这个问题上绊脚。


MFC中重要的头文件AFXWIN.H-C/C++代码类资源 对新手来说,做MFC相关的编程时有时候会不小心动了头文件的内容,难以修正,其中就有afxwin.h 对新手来说,做MFC相关的编程时有时候会不小心动了头文件的内容,难以修正,其中就有afxwin.h 立即下载

相关推荐

afxwin等h头文件

afxwin等h头文件 希望大家都能用上合适的头文件,谢谢支持!

afxwin

afxwin.h是MFC C++类库的必需文件,其中包含如CWin,CStatic,CButton,CString,CEdit等类运行所必需的头文件,最好保证回该句在头文件首行;它还会调用windows.h,该头文件包含有数据类型的定义、API入口点定义和其它有用的参数信息。 Afx前缀是微软MFC一个小组的名称简写,并没有别的意义。 Application Framework技术团队,名为AFX小组,用以开发C++对象导向工具给Windows应用程序开发人员使用。AFX 的"X"没有什么意义,是比较

顺其自然~专栏 6233

第 3 天:Actor 是什么?创建你的第一个游戏对象!

本文详细介绍 Actor 在 Unreal Engine 5 中的作用,并通过 C++ 创建你的第一个游戏对象。你将学习 Actor 的生命周期(BeginPlay、Tick)、如何添加组件(Static Mesh),并让 Actor 在游戏世界中运作。同时提供 常见问题解决方案,助你快速上手 UE5 C++ 开发!🎮 跟随本教程,构建属于你的第一个游戏对象!

m0_37643873的博客 2630

vs控制台应用程序如果想用MFC的类型,需要包含的头文件

vs2010下,新建一个vc的控制台应用程序,如果在程序中使用到了MFC的类型,比如DWORD,BOOL,LPCTSTR,可以添加<afxwin.h>头文件,而afxwin.h 开始就是 #include <afx.h>。 解释:<afx.h>一些定义与设置,为MFC提供最基本支持,将各种松散的东西组织起来,同时为MFC类库的后续建立 提供方便。一个最简单的...

Zy100Papa的博客 3006

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

【验证技能树】UVM 源码解读01 -- UVM本质上就是软件工程方法论在芯片验证领域的应用

文章摘要: UVM(通用验证方法学)是基于SystemVerilog的芯片验证框架,采用组件化、面向对象和事务级抽象设计。其核心在于职责分离与数据流,通过Driver、Monitor、Sequencer等模块协作实现高效验证。UVM强调复用性、可扩展性和可维护性,类似软件工程的模块化与低耦合原则。理解其体系结构比记忆API更重要,有助于灵活组合组件并提升验证效率。UVM不仅是工具,更融合了软件工程思维,推动验证工作向自动化、系统化发展。掌握UVM底层逻辑能优化验证环境设计,适用于从IP到SoC的多层级验证场

qq_45869788的博客 1040

MFC工程中不要#include <windows.h>,否则会出错。 from http://applehxb.blogbus.com/logs/48742135.html...

如果在MFC工程中#include <windows.h>,那么会有以下编译错误(因为afxwin.h文件中包含了afx.h,afx.h文件中包含了afxver_.h,afxver_.h中包含了afxv_w32.h,而afxv_w32.h中包含了windows.h,请看以下分析): compile error: c:\program files\m...

weixin_30604651的博客 83

AD9361快速锁定实战:Profile寄存器配置与频率调谐算法解析

本文深入解析了AD9361射频收发器的快速锁定(Fast Lock)功能,重点阐述了其核心机制——Profile寄存器配置。通过剖析16字节Profile结构,详细讲解了频率调谐算法,包括LO_DIV、LO_INT、LO_FRAC等关键参数的计算,以及如何通过查表获取优化的环路滤波器参数。文章提供了完整的Python算法示例和FPGA实现要点,旨在帮助工程师实现毫秒级甚至微秒级的频率切换,满足跳频通信等高性能应用需求。

weixin_29196315的博客 229

#error WINDOWS.H already included. MFC apps must not #include <windows.h>

错误提示: afxv_w32.h文件: #ifdef _WINDOWS_      #error WINDOWS.H already included.  MFC apps must not #include    #endif 原因:多次包含 但是:我查找了,自己并未写这条语句,后来Project,General 属性中Use of MFC是可以用的,因此程序会自动调

记录成长过程中的点点滴滴 4万+

高通camera:PDAF的配置与测试

确认相关log日志都已经打开了之后,判断是在3A算法中没有应用到PDAF,可能是之前在调试AF效果的时候关闭了PDAF,打开效果文件对应的文件夹,在\kamorta_lce_S5K3P9\Scenario.Default\XML\STATS。在log中搜索af_pdaf_proc_pd_single,这个函数是pdaf算法中的,源码被封装了,这里看不到,因此只能通过log打印出来的参数来分析pd是否正确,主要参数有pd ,defocus,confidence。PDAF的配置与测试。

arvin_xiong的博客 2487

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

解决方法:#error WINDOWS.H already included. MFC apps must not #include <windows.h>

问题 在使用VS调试程序时,时常会出现这个问题:#error WINDOWS.H already included. MFC apps must not #include <windows.h>,根本原因在于,对windows.h文件进行了重复引用。 解决方法 将windows.h本身或包含windows.h的头文件放在头文件序列的最后。参考链接:https://blo...

weixin_30293079的博客 1286

【华为OD机试】2024年真题C卷(python)-API集群负载统计

【华为OD机试】-API集群负载统计-【华为OD机试】-API集群负载统计:某个产品的 restful API 集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 restful API 是由多个层级构成,层级之间使用/连接,如 A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。 现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用0

u014481728的博客 1495

MFC工程去掉#include <windows.h>

【原因分析篇章】 如果在MFC工程中#include   ,那么会有以下编译错误(因为afxwin.h文件中包含了afx.h,afx.h文件中包含了afxver_.h,afxver_.h中包含了afxv_w32.h,而afxv_w32.h中包含了windows.h,请看以下分析):   compile   error:     c:\program   files\microsoft 

有趣的人生 一半是山川湖海 一半是初心情怀 2911

人工智能训练师三级考试题型全解析|190道真题样例+30天备考路线

人工智能训练师三级考试并不神秘:理论考190道选择题(刷题就能过),实操考代码+方案设计(练练就会)。核心是花时间——30天系统备考,足以从容通过。如果你想从零开始系统备考,覆盖所有考点和实操技能,欢迎查看我的专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程六大模块知识点逐个击破,每个考点都讲透实操代码题手把手教学,附带完整参考代码高频考点速记 + 易错题精讲 + 3套模拟试卷30天备考计划 + 冲刺复习策略。

白话机器学习 6081

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

: fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include 我是在windows console下编译  枚举局域网主机名及其ip   的时候遇到这个问题的   #include "winsock2.h " #include //因为要用到CString所以要包含

fengzizhuang的专栏 9609

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

这个原因是在 中已经包含了,这样就形成了重复包含. 1、MFC工程框架类的头文件包括windows.h,因此没必要手动加, 在你的MFC工程中把所有的#include语句删除即可  2、你在程序中的其他地方将#include "windows.h "删除,然后将#include "windows.h "放到stdafx.h中 将可能包含有#include "windows

fengkuangfj的专栏 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

VC6.0编写BHO #error :  WINDOWS.H already included.  MFC apps must not #include 在StdAfx.h头文件里加入#include   "afxwin.h",就可以解决问题。 一定要在#include 上面加。

十年磨一剑,霜刃未曾试! 2427

MFC apps must not #include <windows.h>

MFC apps must not #include 详细提示: 1>d:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afxv_w32.h(16) : fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #i

闻缺陷则喜何志丹 6196

WINDOWS.H already included.MFC apps must not #include <windows.h>

一,error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include        我们在vs2013中建立的win32应用程序引入MFC时,往往会报这个错误。这是因为在MFC的类库文件中已经引入了WINDOWS.H, 而在vs下,每个.app文件都会默认引入stdafx.h头文件,下面的代码

晴堂嬴上 2万+

WINDOWS.H already included. MFC apps must not #include <windows.h>

VC的Atl工程为我们提供了很好的创建COM工程的方法,可是想要在Atl工程里面使用MFC里的对象(如CString,CFile)却并不容易,这对于那些原本熟悉MFC类库的程序员来说实在是一个很大的麻烦.这里就介绍一下如何在Atl中使用mfc类库:       Atl的工程包括三种类型,ActiveDll, ActiveExe以及Service。 对于ActiveDll工程,只需要在建立工程的时

DarkMagician_Potter的专栏 2280

VC bug修改 MFC apps must not #include <windows.h>

error WINDOWS.H already included.  MFC apps must not #include

Ms.Fox的专栏 717
上一篇: IT业成猝死重灾区【身体是革命的本钱】
下一篇: 使用SHBrowseForFolder函数打开文件目录对话框
mplus
博客等级 码龄16年 10粉丝 9原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值