Car*_*org 93
COM是一种允许重用对象(或更确切地说是组件)的机制,独立于实现组件的程序员和使用它的程序员所使用的语言,而不管组件是否在客户端程序中实现或机器(或网络)上的其他地方.
从广义上讲,每个COM组件都提供一个或多个接口的实现.这些接口使用接口定义语言(IDL)以与语言无关的方式定义.例如,COM中的一个基本接口IUnknown定义如下:
interface IUnknown
{
virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
virtual ULONG AddRef(void) = 0;
virtual ULONG Release(void) = 0;
};
Run Code Online (Sandbox Code Playgroud)
这个小接口是COM的基础,因为每个COM组件都必须实现它.它定义了COM机制的两个重要方面:
QueryInterface
允许调用代码来获取已知接口的实现.在COM中,接口由GUID引用(也称为接口标识符,IID).如果一个对象实现了几个接口,那就是客户端代码如何获得对每个接口的引用.如果你愿意,它可以作为一种铸造操作员.AddRef()
并Release()
实现COM对象的内存管理机制.顾名思义,最常见的模型是引用计数机制,其中实例在最后一个客户端释放其引用后被销毁.安装时,所有COM组件都在系统中注册.如果程序员想要使用某个组件,他需要:
CoCreateInstance()
).您可以在注册表中查看HKEY_CLASSES_ROOT\CLSID
:其中的每个GUID(最可能)是COM组件或接口的标识符,该键下面的条目告诉系统应该如何实例化.COM机器非常复杂.例如,在C中实现或使用COM组件需要大量的工作,但是像Visual Basic这样的高级语言已经做了很多工作来简化COM组件的实现和使用.然而,好处是非常真实的.它使得在Visual Basic中编写应用程序成为可能,但仍然可以将C或C++中的性能关键算法实现为COM对象,可以直接从VB代码中使用.系统负责编组方法调用参数,根据需要将它们传递给线程,进程和网络连接,以便客户端代码具有使用普通对象的印象.
Windows的许多基本部分都基于COM.例如,Windows资源管理器(文件管理器)基本上是一个空shell.它定义了一组用于导航和显示树层次结构的COM接口,实际显示"我的电脑"的所有代码,驱动器,文件夹和文件都是一组实现这些接口的COM组件.
随着.NET的出现,COM正逐渐过时.
归档时间: |
|
查看次数: |
38251 次 |
最近记录: |