上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一个工程时会有很多的工程类型(图1),现在将简单介绍各种类型工程的含义和主要用途。由于这里包含的工程类型太多,有很多本人也没有接触过,有些可能理解的不太对的地方还请谅解。

首先说明一下,如果你的初学者或者C++开发的时间不长,本篇文章的很多内容理解不了是正常的(我当初也不理解)。你可先有大概的概念,等工作(或有实际的项目开发经验)一两年后再回来看看也许就明白了。


图 1:New Project


理解几个概念

在开讲之前先大概理解几个概念,这是理解后面各种工程含义的基础。

COM

COM(Component Object Model)组件对象模型是microsoft制定的一个组件软件标准,跟unix上的CORBA一样。凡是遵循COM标准开发出来的组件称为COM组件。目地是实现二进制方式的软件重用 。在windows平台上,COM的实现形式有DLL(进程内组件)和EXE(进程外组件)2种。

OLE

OLE(Object Linking and Embedding)对象连接与嵌入是微软的复合文档技术,可方便实现应用程序之间的通信。在后来的OLE2中才导入了 COM,提供了对COM的支持,利用这种技术可开发可重复使用的软件组件COM。OLE是软件比较早提出的一种技术。

ATL

ATL(Active Template Library)活动模板库是一套C++模板库,常用于开发COM程序和ActiveX程序。要理解ATL技术可从以下两方面理解:
1.ATL可以说是把COM封装了一下,象MFC一样做成一个库,并有一个向导,使COM应用开发尽可能地自动化、可视化,这就决定了ATL只面向COM开发提供支持。
2.ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效。
在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK(COM软件开发包)直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。而现在 ATL已经成为Microsoft支持COM应用开发的主要开发工具。

MFC

MFC(Microsoft Foundation Classes)微软基础类是微软提供的一个用于Windows程序开发的基础类库。MFC以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类含有大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

ActiveX

ActiveX是微软提出的一种使用COM技术实现的一种组件。该组件是能够在网络环境中进行交互的技术集,它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序,此外ActiveX一般具有界面(VB等下面的ActiveX控件)。

ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:
1. ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX的容器(Container)中插入COM对象。
2. ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自定义的文档等。
3. ActiveX脚本描述(ActiveX Scripting);用于从客户端或者服务器端操纵ActiveX控制和Java程序,传递数据,协调它们之间的操作。
4. ActiveX服务器框架(ActiveX Server Framework);提供了一系列针对WEB服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。
5. 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。

OLE、ActiveX、COM之间的区别

从时间的角度讲,OLE是最早出现的,然后是COM和ActiveX;从体系结构角度讲,OLE和ActiveX是建立在 COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX是两个商标名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE的原因。既然OLE是最早出现的,那么就从OLE说起,自从Windows操作系统流行以来,“剪贴板”(Clipboard)首先解决了不同程序间的通信问题(由剪贴板作为数据交换中心,进行、粘贴的操作),但是剪贴板传递的都是“死”数据,应用程序开发者得自行编写、解析数据格式的代码,于是动态数据交换(Dynamic Data Exchange,DDE)的通信协定应运而生,它可以让应用程序之间自动获取彼此的最新数据,但是,解决彼此之间的“数据格式”转换仍然是程序员沉重的负担。对象的链接与嵌入(Object Linking and Embedded,OLE)的诞生把原来应用程序的数据交换提高到“对象交换”,这样程序间不但获得数据也同样获得彼此的应用程序对象,并且可以直接使用彼此的数据内容,其实OLE是Microsoft的复合文档技术,它的最初版本只是瞄准复合文档,但在后续版本OLE2中,导入了COM。由此可见,COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。 COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。COM是应OLE 的需求而诞生,但它的第一个使用者却是OLE2,所以COM与复合文档间并没有多大的关系,实际上,后来COM就作为与复合文档完全无关的技术,开始被广泛应用。这样一来, Microsoft就开始“染指”通用平台技术。但是COM并不是产品,它需要一个商标名称。而那时Microsoft的市场专家们已经选用了OLE作为商标名称,所以使用COM技术的都开始贴上了 OLE的标签,虽然这些技术中的绝大多数与复合文档没有关系。
====本段内容转载自《OLE、ActiveX、COM、ATL联系与区别》====



各种工程结构

ATL

ATL Project

创建一个基于ATL的工程,用ATL的方式进行COM组件的开发,ATL提供了大量可重用的模板。ATL可用于COM组件的开发,也可用于ActiveX的开发。


CLR

Class Library

CLR Console Application

CLR Empty Project

Windows Forms Application

Windows Forms Control Library

CLR(Common Language Runtime)是公共语言运行库,和Java虚拟机一样也是一个运行时环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR/C++是托管的C++程序,数据和代码是由CLR管理的,调用方不用管内存的分配和释放,CLR好像常用于.net。

这一块我还真不了解,就不说了,怕误人子弟!!!


General

Empty Project

就是创建一个空的工程,不给你添加任何.cpp或.h文件,不进行任何特殊的设置。

Custom Wizard

就是用户自定义向导,什么意思呢?比如你每次建一个新的工程时都期望这个工程中有main.cpp、projectDescription.txt这两个文件,并且main.cpp中有一个默认的main函数。那么你可以建一个Custom Wizard工程,并配制好main.cpp、projectDescription.txt文件及所在目录结构;然后你每次创建一个新的工程时选择都基于这个已有的Custom Wizard工程,新建的工程就有自动添加main.cpp、projectDescription.txt文件了。说白了Custom Wizard就是一个模型,定义工程的默认文件和默认的配置。

Makefile Project

makefile就是对.cpp和.h等文件的组织、构建、编译规则脚本。这个在跨平台开发中会用到,如你开发的程序既要在Windows下编译也要在Linux、Mac下编译,一般就会使用makefile的编译规则。说明:Windows下有一个微软自己的NMake构建器,因为在VS下makefile文件中的内容要符合NMake的规则才能够编译成功。


MFC

MFC ActiveX Control

就是以支持MFC的方式创建ActiveX程序,可快速地开发带有界面的ActiveX程序。
拓展阅读《使用VS2010创建MFC ActiveX工程项目》

MFC Application

这个就是你平常开发MFC程序时会用到的工程, MFC(Microsoft Foundation Classes)是微软提供的一个用于Windows程序开发的基础类库,也是快速开发Windows上的桌面程序一般会选择的方式。

MFC DLL

它也是创建一个MFC的程序,与MFC Application的不同之处是:MFC Application工程生成的是一个.exe的可执行文件,而MFC DLL工程生成的是一个.dll的动态库文件。


Test

Test

顾名思义,这就是一个测试工程,可用来进行单元测试、顺序测试、压力测试等。


Win32

Win32 Console Application

这个就是你最熟悉的控制台应用程序了,编译成功,运行时会出现一个黑色的命令行窗口。上篇文章带你玩转Visual Studio——带你新建一个工程的样例也就是创建的这个类型的工程。

Win32 Project

MFC其实是对Windows API进行的一种封闭,使其具有面向对象的特性。而这个Win32 Project工程就是以直接调用Windows API的方式,使用Windows SDK开发带有窗口界面的程序。


说明

其实,像一般的开发常用的工程类型也就几种:
Win32 Console Application: 控制台应用程序,也是常见的那个黑色命令窗口。
Win32 Project: 直接用Windows API进行Windows桌面应用程序的开发。
MFC Application: MFC工程,用微软提供的类库进行界面程序的快速开发。



上一篇回顾:
带你玩转Visual Studio——带你新建一个工程

下一篇要讲述的内容:
带你玩转Visual Studio——带你高效开发

【转】带你玩转Visual Studio——03.带你了解VC++各种类型的工程相关推荐

  1. 【转】带你玩转Visual Studio——04.带你高效开发

    上一篇文章带你玩转Visual Studio--带你了解VC++各种类型的工程一文中讲了各种类型VC++工程的主要功能和用途.现在将带你一起快速开发c++程序. 有过Java开发经验的人都知道Java ...

  2. 【转】带你玩转Visual Studio——02.带你新建一个工程

    接着上一篇文章带你玩转Visual Studio--开篇介绍继续讲这个主题,现在我们从创建一个新的工程开始. 一步一步创建项目 依次选择菜单:File\New\Project,打开New Projec ...

  3. 【转】带你玩转Visual Studio——01.开篇介绍

    开篇之前,先唠叨几句 本人从事C++开发工作一年半,总想就C++开发方面写点东西.写什么呢?想了一下还是写点跟开发密切相关的吧,要说跟开发最密切相关的那莫过于就是开发工具了,也就是常常说的集成开发环境 ...

  4. 带你玩转Visual Studio(八)——带你跳出坑爹的Runtime Library坑

    在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT.MTd.MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时 ...

  5. 带你玩转Visual Studio——性能分析与优化

    上一篇文章带你玩转Visual Studio--VC++的多线程开发讲了VC++中多线程的主要用法.多线程是提升性能和解决并发问题的有效途经.在商用程序的开发中,性能是一个重要的指标,程序的性能优化也 ...

  6. 带你玩转Visual Studio——开篇介绍

    开篇之前,先唠叨几句 本人从事C++开发工作一年半,总想就C++开发方面写点东西.写什么呢?想了一下还是写点跟开发密切相关的吧,要说跟开发最密切相关的那莫过于就是开发工具了,也就是常常说的集成开发环境 ...

  7. 带你玩转Visual Studio——单元测试

    上一篇文章带你玩转Visual Studio--性能分析与优化讲了找出性能瓶颈和性能优化相关的技能,在大型企业项目的开发中,性能是固然重要的,而另一个过程--测试也是必不可少的.测试有很多的各类:功能 ...

  8. [转载]带你玩转Visual Studio——带你高效开发

    原文地址:http://blog.csdn.net/luoweifu/article/details/48852119#t15 VassistX的简单介绍与下载安装 简单介绍 VassistX的全称是 ...

  9. 一文带你弄懂Visual Studio:运行时库及MT/MTD、MD/MDD

    一文带你弄懂Visual Studio:运行时库及MT/MTD.MD/MDD 引子 什么是Runtime Library? Runtime Library和运行库 MT MTD MD MDD的关系 静 ...

最新文章

  1. 学习笔记——matplotlib学习
  2. LeetCode 2094. 找出 3 位偶数
  3. 口袋之旅html5超强账号,口袋之旅特攻排行榜 强大的绝对能力
  4. 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(小问题大思想)
  5. d3 v4 api transitions
  6. 解决java.lang.OutOfMemoryError: unable to create new native thread问题
  7. 题外话:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗...
  8. Vite Vue项目加载Cesium模块
  9. 第12章 决策树 学习笔记上
  10. 中国十大城市美女(经典套图)
  11. 5、JSP面试题总结
  12. Ubuntu:安装yarn
  13. 计量论文stata代码大全
  14. 20年在线考试计算机应用基础,20年春福师《计算机应用基础》在线作业一【参考答案】...
  15. 用spark统计50年美国最常见的20个名字
  16. Python操作Excel(二)
  17. 解读银保监“个人信息保护专项整治”,强监管下金融业个人信息安全保护如何“守”?|特邀专栏
  18. 想按最低税率3%缴纳个税,月薪和年终奖最高多少最为合适?
  19. elementUi——点击图片时,预览所有大图——功能实现(两种方案)
  20. el-upload清空已上传的文件列表

热门文章

  1. mysql聚合函数rollup和cube
  2. CentOs7.2编译安装Nginx服务器
  3. __bridge,__bridge_retained,__bridge_transfer
  4. 带给你灵感的3D街画艺术设计
  5. VS2008 只生成DLL不生成lib文件
  6. 基于ArcEngine实现分组统计面积的功能
  7. 湖北省汉十高速公路项目接近尾声,所想所感真的值得写写
  8. Flex 学习随笔 ---- 使用WebService 与数据库连接
  9. 混合代码块 Markdown Leedcde
  10. 计算机配置对电子竞技的影响,配置高并不是唯一优点 看看电竞硬件还要啥?...