- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi下的COM编程技术简介
Delphi 下的COM 编程技术简介
组件对象模型(Component Obj ect Model,以下简称COM)是组件对象之间相互接口的规范,凡是
遵循 COM 接口规范的对象彼此之间能相互通信和交互,即使这些对象是由不同的厂商、用不同的
语言、在不同的Windows 版本甚至不同的机器上编写和建立的。Delphi 支持COM 接口规范,Obj ect
Pascal 语言增加了对象接口的方法。用 Delphi 创建的 COM 对象还可以工作在 MTS(Microsoft
Transaction Server)环境中。
软件重用是业界追求的目标,人们一直希望能够像搭积木一样随意“装配”应用程序,组件对
象就充当了积木的角色。所谓组件对象,实际上就是预定义好的、能完成一定功能的服务或接口。
问题是,这些 件对象如何与应用程序、如何与其他 件对象共存并相互通信和交互?这就需要制定?
个规范,让这些 件对象按统一的标准方式工作。
COM 是个二进制规范,它与源代码无关。这样,即使COM 对象由不同的编程语言创建,运行
在不同的进程空间和不同的操作系统平台,这些对象也能相互通信。COM 既是规范,也是实现,它
以COM 库(OLE32.dll 和贴OLEAut32.dll) 的形式提供了访问COM 对象核心功能的标准接口以及一
API 函数,这些API 函数用于创建和管理COM 对象。COM 本质上仍然是客户服务器模式。客户
(通常是应用程序)请求创建COM 对象并通过COM 对象的接口操纵COM 对象。服务器根据客户的
请求创建并管理COM 对象。客户和服务器这两种角色并不是绝对的。
组件对象与一般意义上的对象既相似也有区别。一般意义上的对象是一种把数据和操纵数据的
方法封装在一 的数据类型的实例,而组件对象则使用接口(Interface)而不是方法来描述自己并提供
服务。所谓接口,其精确定义是“基于对象的一组语义上相关的功能”,实际上是一个纯虚类,真正
实现接口的是接口对象)(Interface Obj ect) 。一个COM 对象可以只有一个接口,例如Wndows 95 /98
外壳扩展;也可以有许多接口,例如Ac 咖ex 控件一般就有多个接口,客户可以从很多方面来操纵
ActiveX 控件。接口是客户与服务器通信的唯一途径。如果一个 件对象有多个接口,则通过一个接
口不能直接访问其他接口。但是,COM 允许客户调用COM 库中的QueryInterface()去查询组件对象
所支持的其他接口。从这个意义上讲,组件对象有点像接口对象的经纪人。
在调用 QueryInterface()后,如果 件对象正好支持要查询的接口,则 QueryInterface()将返回该
接口的指针。如果 件对象不支持该接口,则QueryInterface()将返回一个出错信息。
所以,QueryInterface()是很有用的,它可以动态了解 件对象所支持的接口。接口是团向对象
编程思想的一种体现,它隐藏了COM 对象实现服务的细节。COM 对象可以完全独立于访问它的客
户,只要接口本身保持不变即可。如果需要更新接口,则可以重新定义一个新的接口,对于使用老
接口的客户来说,代码得到了最大程度的保护。
认识GUID 、CLSID 、IID
在一个复杂的系统中,可能充斥着大量的组件对象.每个 件对象可能又有大量的楼cJ 为了保
证这些接口彼此不会冲突,Microsoft 规定用GUID 来标识组件对象和接口。GUID 是Globally Unique
Identifier 的缩写.意为全局唯一标旧符.GUID 可以标识 件对象的类,这时候 GUID 也称为
CLSID(Class Identifier 的缩写) 。GUID 也可以标识 件对象的接口,这时候GUID 也称为IID(Interface
Identifier 的缩写)。
引用计数
引用计数是一种机制,使组件对象具有?定的“智能性”。它的工作原理是这样的:当接口对象
第一次创建时,引用计数的初始值为1。当有?-个客户请求获得接口对象的指针时,就调用AddRef()
使该计数加1.当一个客户不再需要 件对象的服务时.它应当调用Release() 。注意,Release()并不
真正释放接口对象,因为可能还有其他客户正在使用接口;Release()只是使引用计数减1。只有当引
用汁数正好减为零时.接口对象才被
文档评论(0)