【原创翻译】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。

(未完待续)

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建http://www.aboutyun.com/thread-9341-1-1.html

文章转自:http://www.aboutyun.com/thread-9341-1-1.html 问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许...

【原创】使用vc向导简历的ATL COM简单对象好像没有IUnknown接口的实现?

  这两天看了看COM和ATL,还是有点云里雾里的感觉。对ATL如何实现COM的一个可创建对象还是不太明白,只知道一些概念。知识仅局限于能够使用VC 的向导简历一个ATL工程,增加一个ATL简单对象,...
  • ppslide
  • ppslide
  • 2011年06月17日 13:27
  • 595

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...

默写js日历控件和详细注释(非原创 原作者:@author KimSoft (jinqinghua [at] gmail.com)

一直对日历控件很感兴趣,感觉很深奥的东西,最近也在努力学习js,看了几本js的经典入门书籍,看完就忘了,就想着看了看 其他大牛写得日历控件,看完了自己尝试着按照他们的思路写了一个,基本算是默背下来的...
  • longvs
  • longvs
  • 2013年09月08日 23:49
  • 1086

COM入门简介

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

李望 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-10000290

一次汇编分析的经历关键词(为了搜索引擎优化,为了点击量)寄存器、ia32、AT&T汇编、intel汇编、x86架构、x64架构背景为了想知道为什么i++ ++i不是原子操作测试方法编写两个程序,调用o...

王鸿飞原创作品转载请注明出处《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-10000

《软件工程》学习心得与感悟             还清楚地记得入学面试时院长问我的问题,“为什么要报考软件学院”?我坚定地回答,“我要来科大学习专业、规范的软件工程,成为一名优秀的软件工程师!”...
  • whfauto
  • whfauto
  • 2016年11月19日 20:29
  • 379

Python NLTK学习6(创建词性标注器)除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f

除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f711e6841d00163e0c0e36...
  • AMDS123
  • AMDS123
  • 2017年03月28日 20:40
  • 6014

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

最近遇到一个需要进行字符串匹配的问题,我就想到用正则表达式来解决,通过ios中的NSRegularExpression这个类就可以帮助我们实现这个。 问题陈述: 现在我要对一个语句进行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【原创翻译】COM入门简介 -- 什么是COM , 怎样使用它 (1)
举报原因:
原因补充:

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