stdafx.h afx.h vs无法打开stdafx.h
Microsoft C 和 C++ 编译器提供了用于预编译任何 C 或 C++ 代码(包括内联代码)的选项。利用此性能特性,可以编译稳定的代码体,将已编译状态的代码存储在文件中,以及在随后的编译中,将预编译的代码与仍在开发的代码结合起来。由于不需要重新编译稳定代码,因此后面每次编译的速度都要快一些。
预编译代码有助于在开发周期中缩短编译时间,特别是在以下情况中:
<UL><LI>总是使用不经常改动的大型代码体。
<LI>程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
</LI></UL> 用于创建预编译头文件的第一次编译所花费的时间比后面的编译稍长一些。通过包含预编译代码可以加快后面的编译速度。C 和 C++ 程序都可以预编译。在 C++ 编程中,常见的做法是将类接口信息分别放到不同的头文件中。此后就可以将这些头文件包含在使用该类的程序中。通过预编译这些头文件,可以缩短程序的编译时间。
VC创建项目时自动创建的预编译头文件,在编译其他文件之前,VC先预编译此文件。头文件stdafx.h引入了项目中需要的一些通用的头文件,比如window.h等,在自己的头文件中包括stdafx.h就包含了那些通用的头文件。</CA>
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。
Standard Application Fram Extend
没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。//不大明白,是自动建立的吗?console不需要把
◎AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windowsinclude文件,除非你又编缉了stdafx.cpp或stdafx.h。
这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
◎你编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立.
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。//条件是?
Afx前缀是微软MFC一个小组的名称简写,并没有别的意义。
MFC的很多代码,包括全局函数名、宏、头文件名都使用了"Afx"。
Afx*.h是一组MFC的核心头文件,比如:
afxwin.h 定义MFC的核心和标准组件
afxext.h 定义MFC的扩展
afxdisp.h 是MFC自动化支持的类定义头文件
afxdb.h 是MFC的ODBC类封装
AFX.H
2008-11-01 18:05
分两种情况:
1。创建工程的时候,你选择MFC Application在你的程序中就可以直接用。
2。如果你创建的是Win32 Application工程,如果想使用MFC的某个类可以如下方式来操作:
a)首先选择菜单里的 Project->Settings。打开的属性对话框里右侧点General选项卡(默认打开的就是这个)有个Microsoft Foundation Classes的选项。此时选择的是Not Using MFC,更改其为Use MFC in a shared DLL。
b)接下来查MSDN看想要使用的类包含在哪个头文件里,如我想使用MFC的CString类,经查询,需要包含Afx.h头文件。将其包含到工程中就可以使用了
注意一点:非常重要,Afx.h的位置写在哪里呢?如果它出现在#include <Windows.h>之后,编译就会报错。
所以,打开StdAfx.h文件,就能找到Windows.h的位置了。加在其之前!
#include <Afx.h>
#include <windows.h>
编译...通过!
祝好运!
====================================================================
3月22日
某个奇怪的链接问题--error 2005,nafxcwd.lib,LIBCMTD.lib,already defined
出现过好几次了
以前的解决方法是将工程文件删除,只保存源文件,重建工程,可以编译链接通过,但再次打开工程时,又会出错,今天很有心情(^ ^),google了一下,网上也有类似的问题
仔细分析了一下,发现问题可能出在对工程中各个cpp文件的编译选项不一致上,由于某些原因,有一部分cpp文件使用预编译头选项(Precompiled Header),有一部分没有使用,造成链接时加载库上的冲突
从网上一个角落里发现一条链接
http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652
在ms搜索里,中文结果
http://support.microsoft.com/kb/148652/zh-cn
对照着看,理解确实是由于运行库加载的问题
"CRT 库对 new、delete 和 DllMain 函数使用弱外部链接.MFC 库也包含 new、delete 和 DllMain 函数.这些函数要求先链接 MFC 库,然后再链接 CRT 库."
解决方法在上头有说明,我觉得应该先找到出现问题的模块,即加载库的顺序,以及链接错误提示的冲突的模块,然后用强制链接器按照正确的顺序链接
第二种是我自己试出来的,即保证每个cpp文件都用预编译头选项(afx.h或stdafx.h,包含这两个文件,没有的话新建,一般的mfc工程都会自动生成,保证包含就可以了),上头的说法是afx.h或stdafx.h中用#pragma comment (lib,"<libname>") 来保证了库的强制加载顺序
OK,搞定
=====================================================
更多阅读
某些网页无法打开怎么办 浏览器无法打开网页
某些网页无法打开怎么办——简介当我们用电脑访问网站的时候,大多数网页可以正常打开,但是某些网页无法打开,这时候怎么办呢?当然出现这个问题的原因是多方面的,小编这里只能根据自己的经验给大家分享交流下小编使用的方法,希望可以帮助到
qq邮箱下载的附件无法打开的解决办法 精 qq邮箱上传附件很慢
qq邮箱还有其他各种类型的邮箱,为了安全,对于一些可疑的、有安全风险的附件会自动的进行处理,一般情况就是将文件的后缀去掉,这样就免除了病毒木马的风险。我们用qq邮箱下载的附件有时候无法打开,双击它会弹出一个打开方式的对话框,通过下
Word 2003文件损坏而无法打开的修复方法 修复损坏的word文档
相信经常用word的朋友都遇到过这种情况:打开之前辛辛苦苦制作的word文档的时候,提示文件损坏无法打开。郁闷的要跳楼。今天就介绍一个方法来修复损坏的word文档,下面是具体的步骤。Word 2003文件损坏而无法打开的修复方法——步骤/方法
无法打开淘宝账号登录界面的解决办法 淘宝售假解决办法
无法打开淘宝账号登录界面的解决办法——简介很多同鞋会碰到这么一个头疼万分的事情,包括死宅的我!突然发现淘宝的账号登录界面死活就是打不开。无论是用IE浏览器,还是用其他浏览器。明明安全控件和数字证书都装好了的,卸载后重装还是不
windows无法打开添加打印机怎么解决 精 windows7添加打印机
windows无法打开添加打印机怎么解决 精——简介 一般很多人在打印的时候或许,都会碰到过这样的情况,点添加打印机后就提示:windows无法打开“添加打印机”。本地打印后台处理程序服务没有运行。请重新启动打印后台处理程序或重新启动计