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

翻译 2007年09月30日 21:59:00

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。

(未完待续)

相关文章推荐

iOS-NSRegularExpression(原创http://zhuhaibobb.blog.163.com/blog/static/27440067201411752450958/)

最近遇到一个需要进行字符串匹配的问题,我就想到用正则表达式来解决,通过ios中的NSRegularExpression这个类就可以帮助我们实现这个。 问题陈述: 现在我要对一个语句进行...

HTML5之SVG详解(一) 时间 2012-12-21 19:49:00 博客园-原创精华区 原文 http://www.cnblogs.com/hupeng/archive/2012/12/2

1、背景 SVG是Scalable Vector Graphics的缩写,意为可缩放矢量图形。1998年,万维网联盟成立了一个工作组,研发一种通过XML来表现矢量图形的技术——SVG!由于SVG...

COM入门简介

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

剖析Force.com的多租户架构(1)- Salesforce的简介

文章不错,引自http://www.dbanotes.net/arch/salesforce_intro.html 在云计算方面,Salesforce 可以称为业界的领袖,它不仅在产品方面比较成...

端口简介http://wenku.baidu.com/view/40fec8d850e2524de5187ee7.html?from=related&hasrec=1

一、端口简介 查找方法http://wenku.baidu.com/view/40fec8d850e2524de5187ee7.html?from=related&hasrec=1 随着计算...
  • rns521
  • rns521
  • 2011-12-19 14:04
  • 2479

Com入门1

最近需要用到COM知识,总结一下刚学到的知识。 1. 什么是COM COM全称是Component Object Model,中文译为组件对象模型。COM组件在物理上是一些DLL或EXE文件;...

COM编程入门(1)

原文地址:http://www.cppblog.com/mzty/archive/2005/12/23/2003.html   COM编程入门 第一部分 什么...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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