afxwin.h 与stdafx.h的联系和区别

(1)Standard Application Frame Extend没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
1.AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要MFCinclude 文件。且这一文件可以随被选择的选项而变化。
2.AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
3.然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
4当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)( 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。)
5.当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。
VisualC++不再分析Windows include文件,除非你又编缉了stdafx.cpp或stdafx.h。这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
1.你编写的任何.cpp文件都必须首先包含stdafx.h。
2.如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
3.由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立


(2)stdafx.h文件中包含了一些必要的头文件(如afxwin.h),对应于stdafx.h有一个stdafx.cpp文件,该文件内包含一句: #include "stdafx.h",其作用是令编译器编译出一个stdafx.obj预编译头文件(pre-compile header,需要设置编译选项),在下次编译时以降低总的编译时间。若使用ClassWizard定义新类,则有可能在stdafx.h中增加新的 include files。比如,若选用MFC template classes,stdafx.h中便会增加:#include <afxtempl.h>。


(3)注:1.afxwin.h是MFC编程的必需文件,其中包含如CString,CEdit类运行所必需的头文件,最好保证该句在头文件首行;它还会调用windows.h,改头文件包含有数据类型的定义、API入口点定义和其它有用的参数信息; 
2.非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误:fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>;

3.#define WIN32_LEANAND_MEAN,在windows的头文件中拒绝接受MFC类库,以加速编译时间; 
4.afx - afx中的af指的是Application Frame的缩写,曾经有一个技术开发团队专门作Application Frame,后来给这个团队命名用afx,x本身没有含义,只不过构成一个响亮的口号,后来就一直沿用下来。

5.建立了一个新的空的工程,项目中的stdafx.cpp使用的是Create Precompiled Header (/Yc),而其它.cpp是用的Use Precompiled Header (/Yu),并且Create/Use PCH Trhough File是stdafx.h

(4)stdafx是预编译头文件。你可以从VC++集成环境菜单Project/Settings...中 
Project Settings Dialog/C/C++/Category:Precompiled Headers/Use precompiled header file(.pch)的Check Box中看到。已经将Stdafx.h文件作为预编译的头文件来使用。预编译头文件是在编译所有Code之前,首先进行的动作。通过解析这个文件,取得定义的结构和参数。这样就不用在编译每个文件时都重新进行解析。提高编译速度。stdafx.h这个名称是可以改变的,你可以指定预编译头文件的名称。这个只在vc中有用,并不是c++的特性,vc中可以在这里声明全局变量和ID的地方

(5) fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directoryA如果根本没有stdafx.h,你为何要包含它.一般只有大工程才需要预编译头文件.stdafx.h删除这一行#include "stdafx.h"B project-> Settings->c/c++ category->Precomiled Headers 选择第一个 Not using precompiled headers 
C Project->Settings->C/C++->Project Options中把/Fp"Debug/Your_Project_Name.pch"和/Yu"stdafx.h"两项删掉就可以了。要注意原来在stdafx.h内包含的文件要包含到各个.cpp文件中.D在*.cpp中的开头加入#include "stdafx.h".(#include "stdAfx.h" 放到另外#include的前面,也就是程序的最前面。使用预编译头文件需要把它放到程序最前面,否则它前面的内容会被忽略)E rebuild all(6)设置了预编译,如果不加#include "stdafx.h", 就会报这个错: fatal error C1010: 
unexpected end of file while looking for precompiled header directive。编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于在您的代码中包含了一个名为"afxwin.h"的头文件,但编译器无法找到它所在的位置导致的。"afxwin.h"是一个与MFC(Microsoft Foundation Classes)相关的头文件。 解决此错误的方法取决于您的项目类型和使用的开发环境。以下是几种可能的解决方法: 1. 确保MFC已正确安装:如果您使用的是Visual Studio进行C++开发,并且项目使用了MFC,请确保已正确安装MFC组件。您可以在Visual Studio的安装程序中选择或添加MFC组件。 2. 更新项目属性:如果您的项目是使用Visual Studio创建的MFC应用程序,请打开项目属性,导航到"配置属性" > "常规",然后确保"使用MFC"选项设置为"使用MFC静态库"或"使用MFC共享DLL",具体取决于您的需求。 3. 检查头文件路径:确认您的代码中包含了正确的头文件路径。检查stdafx.h文件中是否有#include语句,并确保路径指向正确的位置。如果路径不正确,可以根据您实际的文件结构进行调整。 4. 导入正确的库文件:如果您没有使用MFC,但仍然包含了"afxwin.h"头文件,可能是因为代码中包含了不必要的或错误的库文件。检查代码中是否有其他地方引用了该头文件,如果没有必要,请删除相应的#include语句。 希望以上解决方法能够帮助您解决C1083错误。如果问题仍然存在,建议您提供更多关于您的项目类型、开发环境和代码的详细信息,以便更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值