解决方案,是对所有要完成工作的统称,一般叫Solution。

项目,也叫工程,是将解决方案分成若干个模块进行处理,一般叫做Project。添加项目就是添加工程。解决方案是所有项目的总和。

一个项目里面有各种文件,如图片资源、音频资源、视频资源、ICO、MENU、SCROLLBAR等等。是一个独立的包罗各种资源的集合,基本算是功能齐全完备,自给自足的小团体了。因为每个项目里面都有一个CWinApp类的全局变量theApp,这就注定项目是可以独立启动运行的。

它唯一的缺点是小,是解决方案的一部分,能够独立完成特定工作的部件。相当于拖拉机上的发动机或者轮胎。形态完整,功能单一。

类,是完成项目的具体途径,一个项目可以由若干类组成,一般叫做Class。

在ATL项目中:

解决方案还是解决方案。

项目就是所谓的类型库,在IDL文件中有自己的GUID值。

类型库是idl文件、COM类文件,.h文件,.cpp文件,.def文件的综合体。也就是说类型库里面包含了我们所要用的COM组件(COM类)。

而我们经常使用的word、excel的COM组件,都是通过他们的类型库导入客户程序的,然后我们才能通过CoCreateInstance()来构建组件对象。

所有简单理解,类型库是所有相关联的COM组件生成的一个集合。

类就是COM类,也称为COM组件。CoCreateInstance()函数第一个参数就是COM类的GUID。

而且,ATL生成的DLL文件是以项目为单位的,生成的DLL文件名称就是项目名+.dll。因此和MFC类似,ATL的类型库也是一个独立的能被客户程序导入的dll文件,是对COM组件的打包。

导入类型库的意义:

我们要使用某个COM组件,首先导入包含它的类型库。这是让客户程序知道我们要使用的COM组件在计算机中的哪个位置。

知道了类型库的位置,通过组件类的CLSID值,就可以知道组件类的位置,通过接口的IID就可以找到这个接口了。

类型库的意义:

简单点讲,类型库就是COM类的容器,里面包含了若干COM类。

ProgID:

ProgID是在定义COM类时为类起的别名,方便程序员记住。命名规则为:ProjectName.ClassName.VersionNumber,即:

工程名(类型库名称).类名(COM类名称).(版本号)

ProgID是个字符串,能够与其映射的CLSID相互转化:

CLSIDFromProgID()、CLSIDFromProgIDEx()
由 ProgID 得到
CLSID。没什么好说的,你自己都可以写,查注册表贝

ProgIDFromCLSID()
由 CLSID 得到 ProgID,调用者使用完成后要释放 ProgID
的内存

ATL作用:

ATL专门用来生成COM组件的,编译后生成dll文件或者exe文件。

com组件和普通的dll文件有什么区别呢?

com组件优点:1.语言无关性;2.便于升级扩展;3.有很好的继承封装多态特性,即面向对象能力强;4.完成进程间,分布式功能;5.接口调用,便于组织。

com与普通dll区别

vs中解决方案、项目、类及ATL的理解的更多相关文章

  1. VS2015中的项目类图

    发现右键项目的时候,是没有类图的. https://msdn.microsoft.com/en-us/library/hyxd8c85.aspx 右键项目--添加--新建项. 选择类图. 然后将整个项 ...

  2. vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

    vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...

  3. IDEA中Javaweb项目图片加载不出来解决方案

    针对IDEA中Javaweb项目中无法加载图片 一.项目的结构及问题介绍 项目结构如下: 在500.jsp页面中访问了img目录下的相关图片,比如背景图片,我在500.jsp中是这样写的路径  bac ...

  4. Java项目中每一个类都可以有一个main方法

    Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static ...

  5. 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款

    查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...

  6. 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案

    ajax调用webservice中的接口时, 会出现[只能从脚本中调用在类定义上有[ScriptService]属性的...]的异常. 这是因为, 在.net3.5中, 访问web服务, 要对web服 ...

  7. 开发环境中biztalk项目设置注意事项(转)

      适用版本:biztalk 2006 适用环境:开发测试环境 在开发过程中,在开发环境中,一定会是一个对项目不断的修改.编译.部署.测试,查看测试结果,发现有问题,然后回到开发环境再修改.编译.部署 ...

  8. VS IDE 中Visual C++ 中的项目属性配置

    VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...

  9. 第11课 Qt中的字符串类

    1. 历史遗留问题和解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C ...

随机推荐

  1. 指定UIView的某几个角为圆角

    如果需要将UIView的四个角全部设置为圆角,做法相当简单,只需要设置其layer的cornerRadius属性即可.而若要指定某几个角(小于4)为圆角,而别的角不变的时候,这种方法就不好用了.这种情 ...

  2. Cloudera Manager 和 CDH 4 终极安装

    转载请注明出处:http://www.cnblogs.com/thinkCoding/p/3567408.html 系统环境 操作系统:CentOS 6.5 Cloudera Manager 版本:4 ...

  3. 安装CoreOS到磁盘

    1 打开翻&&墙软件 2 打开迅雷,启用“使用IE代理”,下载以下两个文件:(翻&&墙后用IE下会中断) http://stable.release.core-os.n ...

  4. 分布式搜索elasticsearch 环境搭建

    1.elasticsearch安装 elasticsearch的安装超级easy,解压即用(要事先安装好java环境). 到官网 http://www.elasticsearch.org下载最新版的 ...

  5. Delphi列表控件TListView定位到某一行。

    ListView1.Item[100].Focused = true; //定位到索引为100的行ListView1.Item[100].Selected = true; ListView1.Item ...

  6. python入门常用方法(转json,模拟浏览器请求头,写入文件)

    转json import jsonjson = json.loads(html) 模拟浏览器请求头 import urllib.request req = urllib.request.Request ...

  7. python 基础 1.6 python 帮助信息及数据类型间相互转换

      一. 帮助信息   # dir() 方法  查看函数的方法   # help()   # type() 查看类型   name = raw_input('please input you name ...

  8. python 基础 2.6 for 循环 和if循环 中break

    python中最基本的语法格式大概就是缩进了.python中常用的循环:for循环,if循环.一个小游戏说明for,if ,break的用法. 猜数字游戏: 1.系统生成一个20以内的随机数 2.玩家 ...

  9. 一些重要的地址:md5在线解密破解

    md5在线解密破解:https://www.cmd5.com/

  10. python数据分析之:绘图和可视化

    在数据分析领域,最出名的绘图工具就是matlib.在Python同样有类似的功能.就是matplotlib.前面几章我们都在介绍数据的生成,整理,存储.那么这一章将介绍如果图形化的呈现这些数据.来看下 ...