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。 

推荐几款COM组件开发的入门书籍

推荐几本个人读过的比较不错的COM组件相关的书籍,按我的阅读感受排名如下: 1,《Visual C++实践与提高-COM和COM+篇》         这本书我放在第一位,倒不是它有多么出色,但...
  • ghevinn
  • ghevinn
  • 2014年01月25日 17:37
  • 6600

Com编程入门——什么是COM,如何使用COM

本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。  ...
  • mao0514
  • mao0514
  • 2013年09月30日 08:17
  • 1309

UEditor简单入门使用

学习Java已经有一段时间了,去某机构培训了一个月,觉得
  • wtt19940525
  • wtt19940525
  • 2014年07月26日 01:54
  • 1268

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

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

ATL COM 新手入门教程

http://3140618.blog.163.com/blog/static/745179720116131012285/ 介绍 本教程的目的是告诉你如何使用ATL创建一个COM...
  • chla
  • chla
  • 2012年12月18日 10:25
  • 326

编译和链接的区别(转载自从入门到放弃的博客http://blog.sina.com.cn/floatingstars)

一个源程序到一个可执行程序一般需要经过预编译、编译、汇编和链接四个步骤。当我们使用IDE编写代码的时候,这些过程IDE都会默认的为我们完成。但是了解这些过程都是做什么是很有必要的。 1、预编译 ...
  • lurendetiankong
  • lurendetiankong
  • 2016年12月03日 17:52
  • 327

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

转载自: http://www.cppblog.com/ice197983/articles/4178.html 其他不错的资源: http://technet.microsoft....
  • huangxy10
  • huangxy10
  • 2013年05月14日 04:32
  • 2908

Com入门1

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

COM控件快速入门

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

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

0. 关于续传和乱码的说明   问:听说FileZilla不能续传?答:那是以前,现在的新版可以了。   问:听说FileZilla处理中文文件有乱码。答:是有此现象,但这不是bug,原因见下...
  • lslxdx
  • lslxdx
  • 2011年09月29日 14:11
  • 1440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM入门(引用)
举报原因:
原因补充:

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