您的位置:首页 > 其它

【原创翻译】COM入门简介 -- 什么是COM , 怎样使用它 (1)

2007-09-30 21:59 423 查看
Introduction to COM - What It Is and How to Use It
By Michael Dunn
From www.codeproject.com

/**********原创翻译,转载请注明出处*********** 新手水平有限,欢迎批评指教 By FreeKid /

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。

(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐