- 浏览: 1999031 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
1、COM的高级特性 COM规范中有一些高级特性,如可连接对象、永久存储、一致的数据传输等,使COM规范具有更强的生命力,它们也是OLE的基础,但它们的应用又不仅仅局限于OLE,这些高级特性已经广泛应用于Windows操作系统上。 2、入接口、出接口与接收器 入接口(incoming interface)是组件暴露给客户,被动地监听并为客户请求作出反应的接口。而出接口(outgoing interface)是指组件主动与客户进行通信的接口。 出接口不是由对象实现的,而是由客户程序来实现,客户实现这些接口,并把接口指针告诉对象,以后对象利用此接口指针与客户进行通信。在客户程序方,实现这些接口的对象被称为接收器(sink)。接收器本身也是一个COM对象,但它往往比较简单,只用于监听处理组件对象的通知或请求。 客户与对象之间的关系是相对的,入接口和出接口也是一个相对概念,它们只用于通信的一个方向。 3、可连接对象 如果一个COM对象支持一个或多个出接口,则称这样的对象为可连接对象(connectable object),或称为源对象(source)。 可连接对象的出接口也是COM接口,它包含一组成员函数,每个成员函数代表了一个事件(event)、一个通知(notification)或者一个请求(request)。 4、事件、通知与请求 事件和通知在概念上是完全一致的,只是用在不同的场合,例如在COM对象中当某个属性被改变时,它可以给客户发送一个通知;而当特定事情发生时,比如定时消息或用户鼠标操作发生时,对象产生一个事件,客户程序可以处理这些事件。然而,请求的概念则稍有不同,对象给客户发出请求,它希望客户能提供某些信息,期望客户能有应答。 从COM规范的意义上来讲,不管是事件、通知还是请求,它们都通过出接口的成员函数来实现。 5、客户与可连接对象的关系 一般可连接对象不应该向接收器对象请求其他的接口,即不应该调用接收器的QueryInterface成员函数。接收器通常专用于某个出接口指针,接收器对象只实现该出接口,当然出接口是基接口(比如IUnknown)除外。 可连接对象和接收器可以形成一对多或者多对一的关系,也即客户与可连接对象之间可以是一对多或者多对一的关系。 6、可连接对象的基本结构 7、枚举器 在COM规范中,枚举器(Enumerator)只是一个概念,没有确定的接口用于规定枚举器的各项操作,这是因为枚举器所枚举的数据单元的类型不确定,所以也无法给出确切的定义。客户程序利用枚举器对COM对象中的数据单元进行枚举操作,枚举器把客户对数据单元的操作进行了标准化,因此,COM对象可以按照标准的方法把数据提供给客户,而不必建立二者之间新的协议。 因为枚举器对象是一个内部对象,它只需暴露枚举接口,不需要CLSID和类厂,所以枚举器对象的实现比较简单,只需实现枚举操作并控制好引用计数即可。 客户的接收器与源对象的连接点建立连接时,源对象使用连接点枚举器管理连接点对象,连接点对象又用连接枚举器管理连接,通过两层结构建立对象与接收器之间的连接。把源对象与连接点对象分开实现,可以使它们各自保持一定的独立性。源对象与接收器之间的连接具有很好的扩展性,而且连接点对象的独立性也使得COM可连接对象机制更具灵活性和广泛性。 8、接收器的实现 在C++语言中,用一般的类从接口类派生,然后分别实现接口成员函数即可。客户程序在建立连接之前,要先创建接收器对象,因为接收器是客户程序的内部对象,所以在C++语言中可以用new操作符创建接收器对象,然后用此连接器对象建立它与源对象之间的连接。 9、事件的激发和处理 实现事件和请求是可连接对象机制的主要目标。事件即可由源对象的入接口成员函数激发,也可以由用户的某些操作引起,还可以由其它对象或客户调用而引起。总之,在源对象执行过程中,根据需要都可以激发事件或者向客户发出请求,事件和请求在程序逻辑上完全一致。 由于事件或请求是在每个连接上进行的,只有建立了连接的接收器对象才会收到事件或请求。 连接点对象和接收器对象肯能位于不同的进程中,甚至在不同的机器环境中。因此,事件从激发到处理不一定是直接的函数调用,这是可连接对象机制与一般回调函数机制的重要不同。只有在单线程模型下,连接点对象才直接调用接收器对象的事件控制函数。从连接点对象到接收器对象之间的通信过程与以前讨论的客户和对象之间的通信过程一样,也符合COM线程模型规范,必要时侯也需要进行列集处理。 10、出接口通信连接的建立 首先客户方通过源对象的IConnectionPointContainer接口得到源对象的出接口IID,并进一步向源对象请求 IProvideClassInfo接口,调用IProvideClassInfo::GetClassInfo成员函数得到ITypeInfo结构,再进一步得到出接口的ITypeInfo结构而获取接口的所有类型信息,包括成员函数、函数参数的个数和参数类型等。类型信息是客户和源对象双方的通信协议标准。 根据出接口的类型信息在程序运行过程中实现动态接收器对象很不容易。虽然可连接对象提供了完善的双向通信机制,但客户要在运行过程中根据源对象的类型信息响应事件或请求并不容易。为此,OLE发展了COM的可连接对象的机制,它使用IDispatch接口作为出接口,利用IDispatch接口中方法(method)的分发功能实现事件控制函数。IDispatch接口的主要特点是,它可在运行时刻而不是在编译时刻把成员函数与特定的分发ID进行绑定操作,这种特性称为迟绑定(late binging)。IDispatch接口是Microsoft实现自动化技术的基础,现在已经得到了广泛的应用。 11、用IDispatch接口作为出接口 IDispatch接口是自动化对象的基本接口,在高级语言或者脚本语言中,可以直接用符号化的名字即字符串访问自动化对象的属性(property)和方法(method)。使用IDispatch接口有三方面的显著有点:第一,用名字访问属性和方法非常简单易用;第二,自动化对象的IDispatch 接口的vtable是固定的,在有些高级语言或脚本语言中没有指针数据类型,所以在这些语言中描述自定义接口比较困难;第三,IDispatch接口支持迟绑定特性,可以在运行过程中根据名字访问属性或方法。 COM已经提供了IDispatch接口的代理对象(proxy)和存根对象(stub),所以,使用IDispatch接口作为出接口可直接用于进程外源对象的出接口。 IDispatch接口把所有的调用都通过其成员函数Invoke来实现,并且它提供了管理属性和方法的分发ID机制,以及一套描述参数和返回值的方法,所以使得运行时刻动态绑定属性和方法并进行参数类型检查成为可能。可以说Invoke函数是自动化对象的命令翻译器。 根据不同的开发环境和运行环境,实现Invoke函数可以采用不同的方法。如果在编译时刻可以决定客户应该响应那些事件或请求,则可以在程序中建立一张表,把每个事件或请求的分发ID和对应的控制函数作为表项放到表中,把这张表称为事件映射表。MFC的COleControl类使用这种方法处理 ActiveX控制的事件和请求。 12、MFC对连接和事件的支持 (1)MFC实现了连接点类CConnectionPoint,CConnectionPoint实现了IConnectionPoint接口,它用一个数组枚举器管理连接; (2)CCmdTarget也提供了一组宏支持连接点对象; (3)CCmdTarget类有一个内嵌的结构成员m_xConnPtContainer专门用于存放接口IConnectionPointContainer的vtable和偏移量; (4)连接点是可连接对象的核心,但连接点的主要目的是激发事件或发送请求,因此,我们应该对每个事件或请求编写一个激发函数。 MFC提供了类COleDispatchDriver,他主要用于IDispatch接口的客户方调用操作,利用COleDispatchDriver的成员函数,客户可以创建自动化对象,也可以把COleDispatchDriver对象与某个自动化对象联系起来,更有意义的是,COleDispatchDriver使得IDispatch::Invoke调用的参数处理更为简单。 13、用CCmdTarget实现源对象的程序结构图
虽然接收器也是一个COM,但它有特殊性,它位于客户程序内部,并不需要通过COM库来创建,所以接收器并不需要CLSID来标识,也不需要类厂,接收器的标识和创建过程完全是客户程序内部的事情。对于客户程序外部而言,接收器也是一个单独的COM对象,它有自己的引用计数,有自己的接口查询方法,即 QueryInterface成员函数。COM只要求接收器是一个独立的COM对象,COM规范对接收器的实现没有任何限制。
可连接对象可以支持一个或多个出接口,它通过接口IConnectionPointContainer管理所有的出接口。对应于每个出接口,可连接对象又管理了一个称为连接点(connection point)的对象,每一个连接点对象实现了IConnectionPoint接口,客户通过连接点对象建立接收器与可连接对象的连接。连接点即可以访问可连接对象的内部信息,也可以访问客户方的接收器,而其它可以直接使用可连接对象的引用计数器。
利用IDispatch接口作为出接口可以很好地解决接收器的动态创建过程。利用IDispatch接口作为源对象的出接口,由源对象提供出接口的类型信息,即事件控制函数的所有信息,客户程序根据这些类型信息,在Invoke函数中调用相应的事件控制函数。
发表评论
-
如何使用BHO定制你的Internet Explorer浏览器
2009-08-20 11:26 2116如何使用BHO定制你的In ... -
定制IE浏览器的尖兵利器 - BHO
2009-08-19 18:28 2799作者:peterzb(个人 ... -
ATL入门:利用ATL编写简单的COM组件
2009-08-19 18:26 17625使用ATL编写一个简单的COM服务器文/赵湘宁 ... -
用 ATL ActiveX 绘制任意平面函数的曲线
2009-08-19 18:23 1605用 ATL ActiveX 绘制任意 ... -
COM多线程原理与应用
2009-08-19 18:14 2661COM多线程原理与应用 目录: COM多线程原 ... -
com技术简介
2009-07-28 11:32 2635一、COM是一个更好的C++1、COM 是什么Don Box ... -
COM高手总结的八个经验和教训之一
2009-07-28 11:31 1742在日常工作中,我看到 ... -
COM高手总结的八个经验和教训之二
2009-07-28 11:31 1977STA 线程需要消息循环 ... -
COM基础知识
2009-07-28 11:30 1864(1) COM组件实际上是一个C++类,而接口都是纯虚类。 ... -
COM原理及应用----概述
2009-07-28 11:29 17951、组件设计的原始目的 跨平台、跨网络、积木式搭建程序 2、组 ... -
COM原理及应用----COM对象和接口
2009-07-28 11:29 43601、COM对象的理解 ... -
COM原理与应用----COM的实现
2009-07-28 11:28 29011、COM的实现与操作系 ... -
COM原理及应用----COM特性
2009-07-28 11:28 20511、面向对象系统的三个最基本的特性 封装性、多态性 ... -
COM原理及应用----用Visual C++开发COM应用
2009-07-28 11:27 35901、MFC和ATL 对于COM应用的开发来说,建 ... -
COM原理及应用---- 结构化存储
2009-07-28 11:25 23861、结构化存储 ... -
COM原理及应用----命名和绑定技术
2009-07-28 11:25 32031、COM对象的创建方法 客户程序可以通过 ... -
COM原理及应用----统一数据传输
2009-07-28 11:24 24021、概述 COM提供了应用之间数据交换的标 ... -
COM原理及应用----分布式COM(DCOM)
2009-07-28 11:24 29621、DCOM COM的 ... -
COM原理及应用----自动化(Automation)对象
2009-07-28 11:23 22551、自动化技术 自动化技术既以前提到的OL ... -
COM原理及应用----ActiveX控件
2009-07-28 11:22 40531、ActiveX控制 ActiveX控制 ...
相关推荐
1.5.6汽车电子31◆嵌入式系统原理及应用目录1.5.7金融商业31 1.5.8生物医学32 1.5.9信息家电32 1.6本章小结34 习题134 第2章嵌入式系统开发35 2.1嵌入式系统的开发环境、开发工具和调试方式35 2.1.1嵌入式...
第一章 网络安全概论 网络安全技术原理与实践--第一章-网络安全概论全文共20页,当前为第1页。 1.1 网络安全的定义 物理安全 逻辑安全 操作系统安全 网络数据传输安全 网络安全技术原理与实践--第一章-网络安全概论...
深入浅出的理解COM,精通COM,应用COM。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务...多个COM对象可以连接起来形成应用程序或组件系统。
目录: 网盘文件永久连接 01大数据行业与技术趋势 02 FusionInsight HD 03 HDFS分布式文件系统技术 04-06 MapReduce和Yarn分布式计算引擎技术 07 第一周回顾 08-09 HBase_技术原理 10 Hive技术原理 11 ...
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
如果deny则丢弃该数据包并向数据源发送目标不可达的ICMP报文或终止TCP的连接请求。 1.3ACL使用原则 在配置和使用ACL时由于每个接口、每个方向、每种协议只能设置一个ACL,同时ACL按顺序比较,直找到符合条件的那条...
表关系(1:1,1:N,N:M) 基本的关系操作 查询 选择、投影、连接、除、并、交、差、笛卡尔积 数据更新 插入、删除、修改 查询的表达能力很强、是其中最主要的部分 关系操作的特点 集合操作方式,即操作的对象和结果都...
《单片机原理及应用》课程标准 课程名称:《单片机原理及应用》 课程类别:专业选修课程 课程学分:3分 计划学时:64学时 适用专业:机电一体化技术专业 一、课程概述 1.制定依据 本课程标准依据国家职业标准和...
在现代测控系统中,作为关键环 节的传感器处于连接被测控对象和测控系统的接口位置,该课程涉及机械、动力、物理 、化学、光学、材料、电子、生物、半导体、信息处理等众多学科领域,应用领域十分 广泛,与当前多...
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
防火墙通常是单独的计算机、路由器或专有硬件设备,充当访问网络的唯一入口点 只有来自授权主机的连接请求才会被处理,其他连接请求被丢弃 主要用于保护内部网络免受外部不安全网络的侵害 防火墙也可用于Intranet各...
ServerSocket 类提供进行通 信的 Socket 对象。 A. 错误 B. 正确 ----------------- 选择:A 7. Java 编程语言支持多文档界面技术。 A. 错误 B. 正确 ----------------- 选择:B 8. RandomAccessFile 类对文件可以...
可采用ADO,ODBC,OLE DB或JDBC连接数据库, 并调用系统存储过程、自定义存储过程、函数等。 五、进度安排 第1周: 数据库系统概念模型、数据模型设计,创建数据库以及相关对象; 第2周: 前台程序开发,撰写报告,...
6.5.3 TStoredProc过程 6.6 数据感知组件 6.7 事务 第7章 多层数据库应用程序 7.1 一个简单的多层应用系统 7.1.1 服务器端应用程序的建立 7.1.2 客户端应用程序的建立 7.2 多层应用系统处理数据的原理 7.2.1 多层...
多个COM对象可以连接起来以形成应用程序或组件系统,并且组件可以在运行时,在不重新链接或者编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX、DirectX以及OLE等都是基于COM建立起来的,并且...
《android高级编程》首先简要介绍android软件栈,接着陈述为手机创建稳定可靠、赏心悦目的应用程序的基本原理。通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还...
6 面向对象原理 (Object-oriented principles) 7 设计模式 (Design patterns) 8 怎样设计的问题:日期和时间处理 (Design how-to: date and time handling) Part 2: 测试和重构 (Testing and refactoring) 9 测试...