设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册

QQ登录

只需一步,快速开始

搜索
查看: 11502|回复: 13

[交流] MFC、SDK和API有什么区别

[复制链接]
发表于 2012-2-5 18:39:51 | 显示全部楼层 |阅读模式
MFC、SDK和API有什么区别  
MFC Microsoft Foundation Class 微软函数类库

SDK (Software Development Kit,软件开发包)

    软件开发包通常是一系列API函数,而MFC 是由微软公司提供的对API封装后的类库,因此从这个意义上可以说MFC是SDK的封装。另外,mfc中封装了一套消息处理流程,将sdk中API全部做了封装,使得开发起来速度加快,而sdk是最底层的函数库,mfc对它进行了封装。

    用VC编写Windows程序有两种:1. Windwos c方式(SDK),2.C++方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL等。SDK编程就是直接调用Windows的API进行编程,平时人们常说"用SDK写程序"就是指用Windows的API函数来写程序,API由上千个API函数组成(Win95的API有两千多个)。而MFC是API的封闭,结合面向对象程序设计的继承性和多态性组成一个个的"类",共由一百多个类组成。尽管MFC比SDK方便,但要深入VC,直接去学MFC却是不明智的选择。只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。所以学VC最好是先学用SDK编写程序,在此期间深入掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC.

    SDK是基于C语言的,而MFC是基于C++的,这是最根本的区别。MFC主要封装的是界面、文件、WinInet和线程等函数。MFC除了封装API,最重要的是它的体系结构,它所使用的Doc/View结构是SDK中没有的,这种架构是比较特殊的。尽管Doc/View结构不是微软的发明,但它是MFC的特色。微软开发Windows时使用的是C语言,所以最初设计SDK时并没有考虑C++。

    MFC是微软的基本类库,对很多东西已经进行了封装,因此使用起来简单、方便。SDK是采用较一般的C语言,但很灵活。
    一般编写简单的程序,使用MFC应该能达到要求。但如果编写功能强大的程序,则使用SDK较多,尤其是底层的开发。

SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。我们后面只讨论广义 SDK 的一个子集——即开发 Windows 平台下的应用程序所使用的 SDK。

上面只是说了一个 SDK 大概的概念而已,为了解释什么是 SDK ,我们不得不引入 API、动态链接库、导入库等等概念.

程序员首先要接触的是“API”,也就是 Application Programming Interface,其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH 置为 30h 后调用 INT 21h 就可以得到 DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。可以说,DOS API 是“Thinking in 汇编语言”的,而 Windows API 则是“Thinking in 高级语言”的。DOS API 是系统程序的一部分,他们与系统一同被载入内存并且可以通过中断矢量表找到他们的入口,那么 Windows API 呢?要说明白这个问题就不得不引入下面要介绍的这个概念——DLL。

DLL,即 Dynamic Link Library(动态链接库)。我们经常会看到一些 .dll 格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。 Windows 的三大模块就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函数的执行代码。为了使用 DLL 中的 API 函数,我们必须要有 API 函数的声明(.H)和其导入库(.LIB),函数的原型声明不难理解,那么导入库又是做什么用的呢?我们可以这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。

所以,为了使用 API 函数,我们就要有跟 API 所对应的 .H 和 .LIB 文件,而 SDK 正是提供了一整套开发 Windows 应用程序所需的相关文件、范例和工具的“工具包”。到此为止,我们才真正的解释清楚了 SDK 的含义。

由于 SDK 包含了使用 API 的必需资料,所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做“SDK 编程”。而 API 和 SDK 是开发 Windows 应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如 VCL 和 MFC,虽然他们比起“SDK 编程”来有着更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用 API 函数

    附带地,这里简单地给出MFC和 API及 SDK三者的关系:

    MFC是一个类库,主要完成对WIN32 API 的封装,SDK是一个WIN32应用程序开发包,里面包含了开发WIN32应用程序所需的API声明,API是微软提供的WIN32应用程序接口.
简单说,API是接口,SDK是包含API声明的开发包,MFC是封装API的类库.

    我们仍然用VC6的IDE(集成开发环境)来编写SDK程序,启动VC6后选择File菜单的New...选项,在出现的New对话框的Projects标签内选择Win32 Application,然后在Projects Name指定项目的名字,在Location中指定路径后按OK按钮,在出现的对话框中,如果你想要用C语言来写程序可以选择An emtpy project,如果你想创建一个带有WinMain入口函数和普通参数的设定的项目,可以选择A simple Win32 application,如果您想创建一个简单典型的“Hello World!”Win32SDK application应用程序,可以选择A typical "Hello World!" application。确定项目类型后按Finish完成。
  在VC6环境下,你依然可以使用资源编辑器和ClassWizar等工具完成程序的编写。用SDK编写程序关键是能够了解程序的来龙去脉。如果不了解,当然那样效率会很低,不比VB、PB那么快,任何东西都是有得有失,如你熟悉用SDK写程序后,对MFC会比较容易上手的,关键要熟悉C++的三大特性
发表于 2012-2-7 19:13:02 | 显示全部楼层
大致上有了了解,开放API原来就是这意思
发表于 2012-2-8 19:52:03 | 显示全部楼层
厉害!强~~~~没的说了!  
发表于 2012-7-18 10:19:00 | 显示全部楼层
哥最近喜欢上了顶贴,因为,如果帖子火了,那有哥的功劳。如果帖子被顶沉了....哥也会很有成就感...因为是哥搞沉的~~大家切记~不要迷恋哥~哥只是一个传说
发表于 2012-9-19 10:52:02 | 显示全部楼层
不错,看看。  
发表于 2012-9-19 10:52:02 | 显示全部楼层
我的妈呀,爱死你了  
发表于 2012-9-19 10:52:02 | 显示全部楼层
牛牛牛牛  
发表于 2012-9-28 19:19:59 | 显示全部楼层
哈哈 。   V5。。。顶
发表于 2012-10-3 23:46:34 | 显示全部楼层
MFC学习中。。
发表于 2013-2-1 10:52:28 | 显示全部楼层
呵呵,支持一下哈  
您需要登录后才可以回帖 登录 | 5秒快速注册

本版积分规则

关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2  

GMT+8, 2017-8-22 09:45 , Processed in 0.177080 second(s), 31 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表