急!!!ATL中添加mfc 的问题!!!

jiayuxue 2014-03-14 03:37:01
我在ATL中用到MFC的东西。所以在stdafx.h 中添加MFC的头文件
///////////////////////////////////////////
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#endif
//
#include <afx.h>
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
///////////////////////////////////////////////

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

在网上查到,如果将#include <atlbase.h>放到afx头文件的后面可以避免这个问题。但是,如果我将atlbase.h放到上面代码的后面。就会出现更多错误:
error C2146: syntax error : missing ';' before identifier 'TheBaseClass'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2065: 'TheBaseClass' : undeclared identifier
...... ...... ......
还望各位帮帮忙。多谢了!!!!
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiayuxue 2014-03-14
  • 打赏
  • 举报
回复
引用 4 楼 oyljerry 的回复:
[quote=引用 3 楼 jiayuxue 的回复:] [quote=引用 2 楼 CharlesSimonyi 的回复:] 既然 MFC apps must not #include <windows.h> 那就把你的项目中已经#include <windows.h>的地方删掉就行了
afx头文件会引用afxv_w32.h这个文件,上面的错误提示在afxv_w32.h中。它会检查当前头文件中是否已经引用了windows.h,如果引用了就直接报错。 而#include <windows.h>在<atlbase.h>中。 如果atlbase.h在afx.h前,就会报这个错。所以网上有解决方法,是把afx.h放到atlbase.h前面。但是,我这么做时,就会引出我上面提到的其他错误了......[/quote] 那就先不包含这个MFC的头文件,然后看用到什么,再包含对应的MFC头文件[/quote] 用的时候加还是会出现fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>这个错误
oyljerry 2014-03-14
  • 打赏
  • 举报
回复
引用 3 楼 jiayuxue 的回复:
[quote=引用 2 楼 CharlesSimonyi 的回复:] 既然 MFC apps must not #include <windows.h> 那就把你的项目中已经#include <windows.h>的地方删掉就行了
afx头文件会引用afxv_w32.h这个文件,上面的错误提示在afxv_w32.h中。它会检查当前头文件中是否已经引用了windows.h,如果引用了就直接报错。 而#include <windows.h>在<atlbase.h>中。 如果atlbase.h在afx.h前,就会报这个错。所以网上有解决方法,是把afx.h放到atlbase.h前面。但是,我这么做时,就会引出我上面提到的其他错误了......[/quote] 那就先不包含这个MFC的头文件,然后看用到什么,再包含对应的MFC头文件
jiayuxue 2014-03-14
  • 打赏
  • 举报
回复
引用 2 楼 CharlesSimonyi 的回复:
既然 MFC apps must not #include <windows.h> 那就把你的项目中已经#include <windows.h>的地方删掉就行了
afx头文件会引用afxv_w32.h这个文件,上面的错误提示在afxv_w32.h中。它会检查当前头文件中是否已经引用了windows.h,如果引用了就直接报错。 而#include <windows.h>在<atlbase.h>中。 如果atlbase.h在afx.h前,就会报这个错。所以网上有解决方法,是把afx.h放到atlbase.h前面。但是,我这么做时,就会引出我上面提到的其他错误了......
encoderlee 版主 2014-03-14
  • 打赏
  • 举报
回复
既然 MFC apps must not #include <windows.h> 那就把你的项目中已经#include <windows.h>的地方删掉就行了
lvxuef 2014-03-14
  • 打赏
  • 举报
回复
windows.h 文文件重复添加,你搜索一下,哪些地方被你添加了,然后用#ifdef 搞一下

16,471

社区成员

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

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

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