VC++、Win32 SDK、MFC的区别
这是一个初进行开发人员都可能遇到过的概念不清的问题,自己当年也同样有过误解,做技术我感觉一定要专,但是,不代表毫不关心相关的知识,至少概念层次上要知道,所以,这里还是再把这些内容纪录下来,好记性不如烂笔头:
C/C++都是一种编程语言,程序员用它来创作(我喜欢用创作这个词,让写代码有一些艺术气息...)各种各样的程序,简单如计算闰年,复杂到一个系统地实现。当然, 编写标准C程序的时候,我们还经常会调用各种库函数来辅助完成某些功能;初学者使用得最多的C库函数就是printf了,这些库函数是由你所使用的编译器厂商提供的。在Windows平台下,也有类似的函数可供调用;不同的是,这些函数是由Windows操作系统本身提供的。
Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序。这些函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数。我们在编写Windows程序时所说的API函数,就是指系统提供的函数,所有主要的Windows函数都在Windows.h头文件中进行了声明。使用windows API创建的能在windows上运行的程序统称为windows程序。
这些API随着系统的更新升级,他们也是在不断更新和扩充,但是,其行为基本保持不变以保证不同平台对应用程序的兼容性,面对越来越多地API,我们怎么获取可靠的帮助呢?最大的帮助就是MSDN,你可以把MSDN理解为微软向开发人员提供的一套帮助系统,其中包含大量的开发文档、技术文章和示例代码。MSDN包含的信息非常全面,程序员不但可以利用MSDN来辅助开发,还可以利用MSDN来进行学习,从而提高自己。对于初学者来说,学会使用MSDN并从中汲取知识,是必须要掌握的技能。
我们还经常听人说Win32 SDK开发,那么什么是SDK呢。SDK的全称是Software Development Kit,中文译为软件开发包。假如现在我们要开发呼叫中心,在购买语音卡的同时,厂商就会提供语音卡的SDK开发包,以方便我们对语音卡的编程操作。这个开发包通常都会包含语音卡的API函数库、帮助文档、使用手册、辅助工具等资源。也就是说,SDK实际上就是开发所需资源的一个集合,再具体点说,你知道CreatePorcess这个API,那怎么使用,你需要有头文件,当然还需要提供功能的系统DLL库的引出库lib,这些都在SDK中。现在读者应该明白Win32 SDK的含义了吧,即Windows 32位平台下的软件开发包,包括了API函数、帮助文档、微软提供的一些辅助开发工具。
提示:API和SDK是一种广泛使用的专业术语,并没有专指某一种特定的API和SDK,例如,语音卡API、语音卡SDK、Java API、Java SDK等。自己公开的DLL函数也可以叫API!!!
一般来讲,狭义上的API指 MS公开的函数。比如MSDN中介绍的函数。 广义的API可以包括所有的函数,你自己的函数也算,未公开的也是。 指世界上一切函数。都可以叫API--Application Programming Interface ; SDK也不仅仅指MS的开发包,你自己的程序如果需要让别人作2次开发,你就会提供 一些函数接口让别人编程,你提供的材料也叫SDK.
有了语言(C/C++),有了开发资源(SDK)、有了帮助文档(MSDN),ok,我们可以编写windows程序了,等等、工具有没有更好的工具呢,人类之所以进步就在于会使用工具,所以,为了更加高效的开发程序,一些集成开发环境诞生了,其中,Visual C++就是一个支持C/C++语言开发的集成开发环境(IDE)。记住,Vc++不是什么新的编程语言,他只是 IDE,只是一个编程的辅助工具,具体来说,Visual C++包含了源程序编辑器、C/C++编译器、MFC和ATL等,其中,MFC和ATL可以简单的理解为再次封装的Windows的系统接口,原生接口就是API 。
其中,MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,也可以说,MFC是Win API与C++的结合后的再一次封装。
OWL(borland公司,其已经逐渐淡处)、VCL(Borland公司--现在已和Inprise合并专--为DELPHI设计的,其是由OWL演变的)和MFC(ms专为vc++设计的)是不同公司提供的三大类库,更确切点说,他们都是应用框架。
DELPHI:也是一种集成开发环境,不过他支持的语言是源至于pascal的Object Pascal.他使用的框架就是VCL.
BCB:就是Inprise公司使用了Delphi的IDE和VCL,再配上C++语言推出的开发环境C++Builder,很多人很念旧,所以冠以Borland C++ Builder之名,简称为BCB。
ATL是全新的COM 开发工具 :---- ATL 是ActiveX Template Library 的缩写,它是一套C++模板库。 使用ATL 能 够 快速地开发出高效、简洁的代码, 同时对COM 组件的开发提供最大限度 的代码自动生成以及可视化支 持。从Microsoft Visual C++ 5.0 版本开始,Microsoft 把ATL 集成 到Visual C++ 开发环境中。
SDK + C 完全可以进行所有的windows程序开发,当然,你还可以采用MFC + C++,当然,你要用SDK + C++ 也是你的自由,但是MFC + C可是impossible的事情,因为,MFC就是C++写的,C可不支持类哦...
VC++、Win32 SDK、MFC的区别的更多相关文章
- VC++ WIN32 sdk实现按钮自绘详解.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- VC++ WIN32 sdk实现按钮自绘详解 之二(关键是BS_OWNERDRAW和WM_DRAWITEM)
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- VC++ WIN32 sdk实现按钮自绘详解 之二.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- API、Win32 SDK、Win32项目、MFC、Windows窗体应用程序的区别
[原]API.Win32 SDK.Win32项目.MFC.Windows窗体应用程序的区别 首先来看一下每一个术语的定义: API:Application Programming Interface. ...
- VC++ 多线程编程,win32,MFC 例子(转)
一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...
- 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!
1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...
- vc++深入跟踪MFC程序的执行流程
在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉.这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流 ...
- QT,QT SDK, QT Creator 区别
Qt是一个跨平台的C++图形用户界面应用程序框架.(不仅仅是C++,还包括QML,Qquick,html5)它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩 ...
- Win32 SDK程序创建一些控件(简单调用InitCommonControlsEx,并指定ICC_LISTVIEW_CLASSES控件就可以了)
在Win32 SDK中创建一些控件的时候需要注意一下(具体是哪些控件请参看MSDN文档中列出来的) /* MSDN:Carries information used to load common co ...
随机推荐
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
- Objc的底层并发API
本文由webfrogs译自objc.io,原文作者Daniel Eggert.转载请注明出处! 小引 本篇英文原文所发布的站点objc.io是一个专门为iOS和OS X开发者提供的深入讨论技术的平台, ...
- 自建Kubernetes logtail日志采集客户端安装方式
自建Kubernetes安装方式 前提条件 Kubernetes集群版本1.8及以上. 已经安装Helm命令,版本2.6.4及以上. 安装步骤 在日志服务控制台创建一个Project,Project名 ...
- swift常用第三方库
网络 Alamofire:http网络请求事件处理的框架. Moya:这是一个基于Alamofire的更高层网络请求封装抽象层. Reachability.swift:用来检查应用当前的网络连接状况. ...
- 1 翻译系列:什么是Code First(EF 6 Code First 系列)
原文链接:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx EF 6 Code-First系列文章目录 ...
- 让ASP.NET Web API支持$format参数的方法
在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数,只要在WebApiConfig里添加如下三行红色粗体代码即可: using System; using Sys ...
- [svc]openssl对称非对称加密实战
OpenSSL进行aes加密解密-对称加密(symmetry) 建立文件test.txt, 特意写入中英文 # cd /tmp # echo "test测试" > test. ...
- mysql索引hash索引和b-tree索引的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...
- 透彻理解Spring事务设计思想之手写实现
前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),D ...
- 阿里巴巴面试之利用两个int值实现读写锁
首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资 ...