MFC或VC++高手进来下 初学者问几个很菜鸟的问题

本人刚学MFC很菜有几个地方不理解希望高手指教1什么是预编译头文件书中几处说道这个预编译头文件请问是什么作用是什么2用AppWizard建立一个单文档的模板StdAfx.... 本人刚学MFC 很菜 有几个地方不理解 希望高手指教
1 什么是预编译头文件 书中几处说道这个预编译头文件 请问是什么 作用是什么
2 用AppWizard建立一个单文档的模板 StdAfx.h和StdAfx.cpp被生成 这个两个是什么呢 书中说这个StdAfx.h包括了Afxwin.h 我不是很理解
3 什么是动态头文件和静态头文件 书中说自己通过#include 生成的语句都是静态的头文件 不能包括那些在程序开发过程中会变化的头文件 不然就失去了预先编译头文件的意义 这个我也不理解
4 MFC中什么是动态链接 什么是静态链接? 优点 缺点?

就这4个问题 最好用通俗的话详细的解答下 最好有举例子 这样会更容易理解 小弟比较笨 会再加100分酬谢大侠 谢谢~!
展开
 我来答
保晏然2Q
2008-10-01 · TA获得超过1053个赞
知道小有建树答主
回答量:422
采纳率:0%
帮助的人:558万
展开全部
1、预编译头文件就是*.cpp文件或者*.h文件的开头的类似于“#include "*.h" ”的语句就是预编译头文件,它是一个语句。它的作用就是将两个文件的内容联系起来。例如,如果1.CPP中由预编译头文件语句“#include "2.h"”,意思就是1.cpp包含了2.h的内容,在1.cpp中可以使用2.h中的代码、函数、类等等。

2、这两个文件是进行MFC编程的基础,你查看一下StdAfx.h和StdAfx.cpp的内容会发现里面基本上都是预编译头文件语句。在StdAfx.h中包含了很多文件,如<Afxwin.h>、<afxwin.h>、<afxext.h> 、<afxdisp.h>等等,他们都是为MFC编程提供支持的,这些文件中包含了很多系统自带的函数和类,这样你就可以直接使用他们来编写自己的程序。

3、静态头文件应该是指C++系统自带的头文件,一般都在VC系统目录下的Include文件夹内,这些头文件是不允许修改的,否则会产生很多编译错误; 而动态头文件应该是指在一个VC++工程中自己编写的头文件,它一般都放在VC++工程文件夹内,可以自己修改。一般包含着两种头文件的语句稍有不同,如包含静态头文件采用类似于“#include <*.h>”的语句,它表示编译器在编译时要从系统文件夹开始查找该头文件;而包含动态头文件采用类似于“#include "*.h"”的语句,它表示编译器在编译时从当前工程的文件夹开始查找该头文件。所以“自己通过#include 生成的语句都是静态的头文件 不能包括那些在程序开发过程中会变化的头文件 不然就失去了预先编译头文件的意义”这句话说的不准确,太绝对了。

4、动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。
动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码
fa...7@163.com
2008-09-30 · TA获得超过700个赞
知道答主
回答量:886
采纳率:0%
帮助的人:382万
展开全部
d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2008-10-01 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2617万
展开全部
看了你的问题,不建议你现在学习mfc,可以考虑vb,c#,或从头学c/c++.没有c/c++的基础学这个没什么大的意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silvergingko
2008-10-01 · TA获得超过5945个赞
知道小有建树答主
回答量:688
采纳率:0%
帮助的人:928万
展开全部
1、您的第一个问题是在不好回答,感觉您还缺乏很多知识,您的第一个问题并不是MFC里的问题,是C中的知识问题了。感觉您的基础不太好,应该先学C,C++,最后是VC
2、第二个问题是只有包括了Afxwin.h后,才能在MFC中使用以Afx开头的函数(Afx***形式的函数),这和包含其它头文件的作用是一样的,即使在c中,如果你不包含string.h,你就不能使用strcpy(有一定认识后,你会明白strcpy这类函数高手都不用的,它有内存溢出的漏洞会给黑客利用,微软已使用替代的函数来代替strcpy,呵呵,题外话)
3、您的这个问题也没法回答,主要是里面要解释就要解释很详细,可以写一篇文章,您才能明白,和第一题一样,说得太简单等于没说,您明白不了
4、动态链接、静态链接的是文件,动态链接的是后缀为DLL的文件(Dynamic Link Library),静态链接的是后缀为LIB的文件(Library);为什么要链接文件呢,因为我们在写程序时要使用各种函数啊,而函数是怎么执行的内容就写在了这两种文件里,记住头文件里没有函数的定义,只是声明而已。如果不链接这两种文件,编译器就会报错,原因是找不到函数的定义(就是函数怎么执行的)。当包含了LIB文件时,编译器会把这个文件中的函数执行代码也插入到您的程序代码中,包含DLL时,编译器是不会把函数执行代码插入进程序中的。因此包含LIB文件(静态链接)生成的程序要大很多,DLL(动态链接)要小很多。但通过静态链接方式生成的程序可以在几乎任何计算机上使用,而动态链接的程序虽然小,但如果您的程序在其它机器上运行的话,会出错。譬如:strcpy您用动态链接的话,函数执行代码是在DLL这个文件里,程序运行的时候当执行到strcpy时,它会让WINDOWS操作系统自动把这个DLL文件里的strcpy执行代码放入您的程序里执行,如果您的程序在其它机器上运行,如果机器里没有这个DLL文件,当执行到strcpy时就会出错。(晕,以为第4个问题回答会比较简单,但怕您看不懂,还是说了这么多)
P.S. 请您注意,我以上说的您要理解它的概念,别钻牛角尖,因为我的回答是不严密的,只是给初学者了解一下有关概念,说得太严密,会写好几千字才算严密,而且1,3两个问题实在不能在500字说清楚,因为一个概念会带出另一个概念,没完没了。建议您看书时,不要看一本书,买个3、4本书结合看。譬如C中说指针的概念时,您拿3本书同时看有关指针这一章节的内容,采取相互补充的学习方式!还有是您的基础不太好,还是要巩固C,C++的基础!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
joe5yellow
2008-10-01 · TA获得超过211个赞
知道答主
回答量:158
采纳率:0%
帮助的人:79.2万
展开全部
隔两搂下面的那个答案相当的详细~~但是也很书面,不过相当清楚了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式