- 浏览: 1998903 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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对象类似于C++语言中类的概念,类的每个实例代表一个COM对象,它也包括属性(即状态)和方法(即操作),状态反映对象的存在,方法就是接口。 2、COM对象的标识-CLSID GUID是一个128位的随机数,重复概率极低。它的值来源于两部分:空间值(网卡地址或随机数)和时间值。 获得GUID值可以使用VC++提供的工具:GUIDGen.exe 和 UUIDGen.exe。或者使用COM库的API函数CoCreatGuid()。 3、COM对象与C++对象的比较 COM对象将数据完全封装在对象的内部。C++对象的封装是在语义上的封装,通过不同的数据类型实现数据的封装。 COM对象的可重用性通过包容和聚合实现。C++对象的可重用性通过类的继承来实现。 COM对象的多态性通过其接口体现,C++对象的多态性通过其虚函数体现。 4、COM接口的作用和意义 COM规范的核心内容是关于接口的定义,虽然COM本身并不复杂,但是围绕COM接口有很多内容值得仔细探讨,包括接口的标识、接口函数的调用习惯、参数处理、接口与对象的关系以及接口与C/C++的关系、COM接口多具有的特性等。 COM定义了一套完整的接口规范,不仅可以弥补API作为组件接口的不足,还从分发挥了组件对象的优势,并实现了组件对象的多态性。 5、接口定义和标识 从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。 客户程序用一个指向接口函数结构的指针来调用接口成员函数。实际上接口指针指向另一个指针pVtable。 接口函数表称为虚函数表(Virtual Function Table ,简称vtable),指向vtable的指针为pVtable。对于一个接口来说,它的虚函数表vtable是确定的。 6、接口设计的问题 在接口成员函数中,字符串变量必须用Unicode字符指针,这是COM规范的要求。 COM API函数使用大多数语言惯用的_stdcall调用习惯。 用C语言定义COM接口,需要有结构体struct定义其接口结构,接口成员函数必须有一个this指针。 用C++语言定义COM接口,因为由C++语言class的实现机理可以看出,COM接口结构中的vtable与class的vtable(类的虚函数表)完全一致,因此,用class描述COM接口是最方便的手段。此时,接口成员函数隐藏了this指针。 class 型接口的说明要比struct 型接口的说明简捷得多。 7、COM接口与对象的联系 接口类只是一种描述,并不提供具体的实现过程。如果COM对象要实现接口,则COM对象必须以某种方式把它自身与接口类联系起来,然后把接口类的指针暴露给客户程序,于是客户程序就可以调用对象的接口功能了。 用 class型接口通过把接口指针(this)与对象数据绑定在一起的方法实现对COM接口的支持比较直观、简捷易于理解。实际上,也可以采用其他的方法来实现接口,只要接口成员函数中this指针(即接口指针)与对象数据能建立确定的连接,在接口成员函数中可以访问到对象数据即可。例如,VC++的MFC 库和ATL(active template library ,活动模板库)模板库分别采用了不同的机制来提供对COM接口的支持。 8、接口描述语言IDL COM 规范在采用OSF的DCE规范描述远程调用接口IDL(interface description language ,接口描述语言)的基础上,进行扩展形成了COM接口的描述语言。接口描述语言提供了一种不依赖于任何语言的接口描述方法,因此,它可以成为组件程序和客户程序之间的共同语言。 COM 规范使用的IDL接口描述语言不仅可用于定义COM接口,同时还定义了一些常用的数据类型,也可以描述自定义的数据结构,对于接口成员函数,我们可以制定每个参数的类型、输入输出特性,甚至支持可变长度的数组的描述。VC++提供了MIDL工具,可以把IDL接口描述文件编译成C/C++兼容的接口描述头文件(.h)。 9、接口的内存模型 COM对象往往有自己的属性数据,它们反映对象的状态,并用于区分不同的对象。对于有多个对象的客户,数据属性是不能公用的。 10、接口的特点 二进制特性 接口不变性 继承性(扩展性):类似于C++中类的继承性,接口也可以继承发展,但方式不同。类继承不仅是说明继承,也是实现继承,即派生类可以继承基类的函数实现,而接口继承只是说明继承,即派生的接口只继承了基接口的成员函数说明,而没有继承基接口的实现。类继承允许多重继承,但接口继承只允许单继承。根据COM规范,所有接口都必须从IUnknown派生,可以直接派生,也可以间接派生。但大多数都是直接派生。OLE系统中,接口最后字母是“2”或“Ex”的,标煤它是一个继承接口。 多态性:COM对象具有多态性,其通过COM接口体现。 11、IUnknown接口提供了两个非常重要的特性:生存期控制(使用引用计数)和接口查询。 12、IUnknown接口引用计数的设置层级 引用计数在组件一级实现则计数分辨率太粗(选择全局变量),在对象一级实现恰好(使用C++类的成员变量),在接口一级实现则计数分辨率太细(使用类成员变量)。 13、使用引用计数的规则 根据不同场合使用或者传递接口指针标量进行分类,并给出相应的规则: (1)函数的参数中使用接口指针变量。 输入参数:由于输入参数由调用函数控制,因此被调用函数执行过程中,接口指针一定保持有效,引用计数不需要改变。 输出参数:输出参数是指在被调用函数执行过程中进行赋值的参数,而且被调用函数并没有用到函数初始化传进来的值,输出参数相当于函数的一个返回值。在C/C++语言中,输出参数为一个指针变量(COM中不使用引用变量)。因为输出参数相当于在被调用函数中生成了一个新的接口指针变量,因此,在被调用函数返回之前,对输出参数应该调用AddRef使接口引用计数增1。这条规则也适用于函数返回值为接口指针变量的情况。 输入-输出参数:在参数被修改之前,对原来传进来的接口指针调用Release以使引用计数减1,在参数被修改之后,对新的接口指针变量调用AddRef,以标记对新的接口指针的引用。如果在函数执行过程中参数没有被修改,则不需要改变。 (2)局部接口指针变量:因为在局部函数块中,接口指针总是有效的,所以,一个局部接口指针变量被赋了值并调用了接口成员函数,引用计数不需要改变。 (3)全局接口指针变量:把全局接口指针变量作为输入参数传给某个函数之前,应该调用AddRef以保证在函数调用中可以使用给接口指针变量,因为它是全局变量,其他的函数有可能会调用Release函数。在函数返回之后应该调用Release函数。 (4)C++中类成员变量为接口指针变量:因为对于类的作用域来讲,成员变量相当于全局变量,因此适用于规则(3)。 (5)当以上情形都不适合时,使用以下一般的规则: 在顺序执行过程中,如果要对一个接口指针变量赋值,则对赋值后的接口指针变量调用AddRef,并且,如果赋值前的接口指针变量还没有结束,则赋值前必须对它调用Release以便先结束它的使用。 如果要结束使用一个接口指针变量,以后不再用到它了,则调用Release函数。 14、接口查询 使用QueryInterface函数查询接口,其返回值有S_OK、E_NOINTERFACE、E_UNEXPECTED。 15、COM对象的接口原则 (1)对于同一个对象的不同接口指针,查询得到的IUnknown接口必须完全相同。即每个对象的IUnknown接口指针是唯一的。 (2)接口对称性。即对一个接口查询其自身总应该成功。 (3)接口自反性。 (4)接口传递性。 (5)接口查询时间无关性。 16、多接口COM对象的实现方法 在C++语言中有两种实现方法:一是使用多重继承,把所支持的接口作为其基类,然后在对象类中实现接口成员函数;二是使用内嵌接口类成员。
发表评论
-
如何使用BHO定制你的Internet Explorer浏览器
2009-08-20 11:26 2116如何使用BHO定制你的In ... -
定制IE浏览器的尖兵利器 - BHO
2009-08-19 18:28 2798作者:peterzb(个人 ... -
ATL入门:利用ATL编写简单的COM组件
2009-08-19 18:26 17623使用ATL编写一个简单的COM服务器文/赵湘宁 ... -
用 ATL ActiveX 绘制任意平面函数的曲线
2009-08-19 18:23 1604用 ATL ActiveX 绘制任意 ... -
COM多线程原理与应用
2009-08-19 18:14 2660COM多线程原理与应用 目录: COM多线程原 ... -
com技术简介
2009-07-28 11:32 2634一、COM是一个更好的C++1、COM 是什么Don Box ... -
COM高手总结的八个经验和教训之一
2009-07-28 11:31 1741在日常工作中,我看到 ... -
COM高手总结的八个经验和教训之二
2009-07-28 11:31 1977STA 线程需要消息循环 ... -
COM基础知识
2009-07-28 11:30 1863(1) COM组件实际上是一个C++类,而接口都是纯虚类。 ... -
COM原理及应用----概述
2009-07-28 11:29 17931、组件设计的原始目的 跨平台、跨网络、积木式搭建程序 2、组 ... -
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 35881、MFC和ATL 对于COM应用的开发来说,建 ... -
COM原理及应用----可连接对象
2009-07-28 11:26 22921、COM的高级特性 COM规范中有一些高 ... -
COM原理及应用---- 结构化存储
2009-07-28 11:25 23861、结构化存储 ... -
COM原理及应用----命名和绑定技术
2009-07-28 11:25 32031、COM对象的创建方法 客户程序可以通过 ... -
COM原理及应用----统一数据传输
2009-07-28 11:24 24001、概述 COM提供了应用之间数据交换的标 ... -
COM原理及应用----分布式COM(DCOM)
2009-07-28 11:24 29621、DCOM COM的 ... -
COM原理及应用----自动化(Automation)对象
2009-07-28 11:23 22541、自动化技术 自动化技术既以前提到的OL ... -
COM原理及应用----ActiveX控件
2009-07-28 11:22 40521、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嵌入式...
网络协议攻击 TCP/IP协议由网间层的IP协议和传输层的TCP协议组成,它定义了网络设备接入Internet的方式及网络设备间传输数据的标准 网络接口层 主要负责定义网络介质的物理特性,包括机械特性、电子特性、功能特性...
1. 本书以TI公司的TMS320C6000系列DSP为介绍的对象。 2. DSP开发环境CCS可以运行在Windows 2000或Windows XP系统下。 2 光盘内容介绍 1. 随书所赠光盘中每一个文件夹对应书中的一章。 光盘中的所有实例分别命名为...
6.2.2 编写控制台程序和图形用户界面应用程序 158 6.2.3 获取和设置环境变量 158 6.3 线程、纤程 162 6.3.1 创建线程、退出线程、获取线程信息 162 6.3.2 挂起、恢复、切换、终止线程 164 6.3.3 创建远程...
考虑到读者对象的需求和实用性,本版仍以Inte l80x86系列微处理器为平台,介绍其3个不同时期的典型代表--8088、80386及Pentium4的基本结构和工作原理;保持了第2版中基本指令系统、输入/输出系统、接口电路设计内容...
使用和处理COM对象——如何创建、使用和销毁COM对象。 基本接口——描述IUnknown基本接口及其方法。 掌握串的处理——在COM代码中如何处理串。 应用COM技术——例子代码,举例说明本文所讨论的所有概念。 处理...
全书共分10章,以AT89C52为典型产品系统地介绍了单片机的系统结构、指令系统、汇编语言和C51程序设计方法、单片机典型的功能模块原理与应用技术、单片机的扩展、设备接口和编程技术以及应用系统的设计和调试方法。...
NS2 网络模拟 原理和应用 pdf NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向...
NS2 网络模拟 原理和应用 pdf NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向...
---【课时2】02-JDK8接口新特性应用.mp4 ---【课时3】03-JDK8中lambda表达式应用.mp4 ---【课时4】04-JDK8中的方法引用.mp4 ---【课时5】05-JDK8中的Stream应用.mp4 ---【课时6】06-JDK8中的Stream课堂练习.mp4 ---...
NS2 网络模拟 原理和应用 pdf NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向...
制定依据 本课程标准依据国家职业标准和《机电一体化技术专业人才培养方案》中的人才培养规格要求和对《单片机原理及应用》课程教学目标的要求而制定,用于指导该课程的教学与课程建设。 2.课程的性质与地位 原来...
1.3ACL使用原则 在配置和使用ACL时由于每个接口、每个方向、每种协议只能设置一个ACL,同时ACL按顺序比较,直找到符合条件的那条以后就不再继续比较,因此应注意以下3点原则。(1)最小权限原则:即只给予受控对象...
NS2 网络模拟 原理和应用 pdf NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向...
在现代测控系统中,作为关键环 节的传感器处于连接被测控对象和测控系统的接口位置,该课程涉及机械、动力、物理 、化学、光学、材料、电子、生物、半导体、信息处理等众多学科领域,应用领域十分 广泛,与当前多...
NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。 本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细...
10-25 1 jquery框架 jquery对象与dom对象区别及混合使用 10-25 2 jquery id选择器 层次选择器 10-25 3 jquery过滤选择器及练习题讲解 10-25 4 内容过滤器 可见度过滤器及练习讲解 10-26 1 课程回顾 10-26 2 属性过滤...
1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的 结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 .1.8 怎样使用设计模式 20 第2章 实例...