COM入门(引用)

原创 2007年10月04日 11:15:00

COM入门简介 -- 什么是COM , 怎样使用它 (1)

本文目的:
写这个指南是为了那些刚接触COM,并且需要相关基础知识帮助的程序员们。文章简要涵盖了COM规范,并解释了一些COM术语,描述了怎样重用现有的COM组件。本文没有涵盖关于自定义COM对象或接口的相关知识。

简介:
最近,COM(组件对象模型)这个通俗的三字缩写词似乎在windows世界中无处不在。霎时间出现了数以千计(tons of)基于COM的新技术,技术文档中提出了许多诸如COM对象,接口,服务器等术语,但这一切都是以你熟悉COM怎样工作且知道怎样使用它们为前提的。

本文从基础起点开始介绍COM,描述了它相关的内部机制并且展示了怎样去使用(specifically,Windows shell)提供的COM对象。读完本文,你将能够使用Windows内置和第三方提供的COM对象。

本文假设你对C++很熟悉。我在示例代码中使用一小部分MFC和ATL,但我会详细彻底的解释示例代码,即使不熟悉MFC或ATL,也应该将能够很好的理解。本文各章节如下:

COM - 它到底是什么? - 简短介绍COM标准,以及它是为了解决什么样的问题而产生的。不知道这些并不影响使用COM,但为了能够理解为什么COM是现在这个样子,我仍然建议您去阅读这一部分。

基本元素定义 - COM相关术语,并描述那些术语都代表了什么。

使用COM对象 - 怎样创建,使用和销毁COM对象。

基础接口 - IUnknown - 描述IUnknown基础接口中的方法。

注意 - 串处理 - 怎样在COM的代码中进行串操作

汇总在一起 - 示例代码 - 两个集合示例代码展示并说明了在本文中的出现的所有概念。

处理HRESULTs - 描述HRESULT类型,并说明怎样用它测试错误和成功的代码。

相关参考 - 你应该购买的书目

COM - 它到底是什么?

简单的说,COM是为了跨越不同应用程序和语言,用来共享二进制代码的一种方法。这并不像,比如说C++的某些功能是用来促进代码重用的。ATL是一个这样的绝好例子。当然,源码级别的重用能够工作的很好,但它只限于C++。而且它也引入了命名冲突的可能性,更不用说多处相同的代码副本让你的工程臃肿不堪了。

Windows让你可以使用DLLs在二进制级别下重用代码。毕竟,那是因为Windows就是用kernel32.dll,user32.dll等文件提供系统应用功能的。但是由于DLLs是以C语言的接口形式存在的,所以它们只能被C语言,或者那些能够理解C语言调用规范的语言所使用。共享本应是DLLs本身的责任,但现在它就把这些负担转移到了编程语言工具身上。

MFC则用它本身的扩展DLLs引入了另一种二进制共享机制,但是这看起来更加具有限制性 - 你只能在MFC应用程序中使用它们。

COM定义了一种二进制标准,并解决了所有这些问题。也就是说,COM具体指明了二进制模块(DLLs和EXEs)必须被编译成一种可匹配的特殊结构。标准同样精确的指明了COM对象必须在内存中怎样组织并存在。二进制内容必须同样不能依赖任何编程语言的特性(比如C++中的名称修饰)。一经完成,模块可以很容易的被任何编程语言访问。二进制标准把兼容性的负担放在了编译器上,编译器生成二进制内容,这些内容将能够更加容易的被之后的程序所使用。

内存中COM对象的结构与C++中虚函数使用的结构是相同的,这也是为什么许多COM代码使用C++来表达的原因。但是请记住,使用哪种语言写模块是无关紧要的,因为最后的二进制内容是可以被所有语言使用的。

顺便提一下,COM并不是win32特有的,它可以,至少在理论上,可以被移植到Unix或任何系统上。但是,我似乎还没有在Windows世界之外见过COM。 

相关文章推荐

用ATL创建COM组件(详细分析了ATL创建的各种文件的意义,看完之后ATL就入门了)

转载自: http://www.cppblog.com/ice197983/articles/4178.html 其他不错的资源: http://technet.microsoft....

Com入门1

最近需要用到COM知识,总结一下刚学到的知识。 1. 什么是COM COM全称是Component Object Model,中文译为组件对象模型。COM组件在物理上是一些DLL或EXE文件;...
  • hhhbbb
  • hhhbbb
  • 2012年06月05日 09:51
  • 392

COM控件快速入门

 1.什么是COM COM是一种跨应用和语言共享二进制代码的方法。与C++不同,它提倡源代码重用。ATL便是一个很好的例证。源码级重用虽然好,但只能用于C++。它还带来了名字冲突的可能性,更不...

用FileZilla Server开FTP:看图入门(转自:http://blog.sina.com.cn/s/blog_46dac66f010003cm.html)

0. 关于续传和乱码的说明   问:听说FileZilla不能续传?答:那是以前,现在的新版可以了。   问:听说FileZilla处理中文文件有乱码。答:是有此现象,但这不是bug,原因见下...
  • lslxdx
  • lslxdx
  • 2011年09月29日 14:11
  • 1245

【TRIO-Basic从入门到精通教程八】QT使用Trio com组件编程实战

大家好,今天给大家带来一篇关于QT添加TRIO com组件的编程例程,给初次使用的朋友带来捷径之路。 首先,我们要使用TRIO COM组件,需要安装trio com组件程序。组件程序到官网下载最新版,...

COM编程入门(2)

原文地址:http://www.cppblog.com/mzty/archive/2005/12/23/2004.html   COM编程入门 第二部分 深入...

COM编程入门(1)

原文地址:http://www.cppblog.com/mzty/archive/2005/12/23/2003.html   COM编程入门 第一部分 什么...

COM入门简介

COM简单来说在不同应用和语言之间提供了一种二进制代码级分享途径的方法。这和C++重用代码有很大不同,C++只是提供了一种源代码级的 代码重用(ATL就是一个很好的例子)它的调用者只能使用C++语言,...

Visual studio——LightSwitch 开发入门 http://www.cnblogs.com/neozhu/archive/2011/10/06/2199798.html

lightswitch功能强大,易于对数据进行统计管理

互联网协议入门(一)(转自:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html)

我们每天使用互联网,你是否想过,它是如何实现的?   全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不...
  • tyb1222
  • tyb1222
  • 2012年06月01日 22:30
  • 1718
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM入门(引用)
举报原因:
原因补充:

(最多只允许输入30个字)