C++ 简而言之,COM(组件对象模型)是什么?

C++ 简而言之,COM(组件对象模型)是什么?,c++,com,C++,Com,COM对象似乎是由操作系统管理的通用对象。对象遵循严格的接口,允许您查询对象以确定信息。这是COM对象吗?< P> com是一种机制,它开发了允许人们分发二进制文件的二进制文件,即使调用方使用另一个厂商的C++编译器,或(最终)完全不同的语言,二进制文件也可以重用。 如果您想对COM有一个很好的介绍,read by.是一种允许重用对象(或者更确切地说是组件)的机制,它独立于实现该组件的程序员和使用该组件的程序员所使用的语言,并且独立于组件是在客户端程序中还是在机器(或网络)的其他地方实现的 广义

COM对象似乎是由操作系统管理的通用对象。对象遵循严格的接口,允许您查询对象以确定信息。这是COM对象吗?

< P> com是一种机制,它开发了允许人们分发二进制文件的二进制文件,即使调用方使用另一个厂商的C++编译器,或(最终)完全不同的语言,二进制文件也可以重用。 如果您想对COM有一个很好的介绍,read by.

是一种允许重用对象(或者更确切地说是组件)的机制,它独立于实现该组件的程序员和使用该组件的程序员所使用的语言,并且独立于组件是在客户端程序中还是在机器(或网络)的其他地方实现的

广义地说,每个COM组件都提供一个或多个接口的实现。这些接口是以与语言无关的方式使用定义的。例如,COM中的一个基本接口定义如下:

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};
这个小接口是COM的基础,因为每个COM组件都必须实现它。它定义了COM机制的两个重要方面:

  • QueryInterface
    允许调用代码获取已知接口的实现。在COM中,接口由GUID(也称为接口标识符,IID)引用。如果一个对象实现了多个接口,那么客户端代码就是通过这种方式获得对每个接口的引用的。如果你愿意的话,它就像一种施法操作符
  • AddRef()
    Release()
    实现COM对象的内存管理机制。顾名思义,最常见的模型是引用计数机制,在该机制中,在最后一个客户端释放对实例的引用后,实例将被销毁
安装后,所有COM组件都会在系统中注册。如果程序员想要使用某个组件,他需要:

  • 确保组件安装在可触及的位置。大多数情况下,它位于运行应用程序的系统上,但COM+还允许组件存在于远程计算机上
  • 知道给定组件的GUID。有了这个GUID,客户机就可以要求系统实例化组件(在C中,这样做的函数称为
    CoCreateInstance()
    )。您可以在注册表中的
    HKEY\U CLASSES\U ROOT\CLSID
    下查看:其中的每个GUID(很可能)都有一个COM组件或接口的标识符,该键下面的条目告诉系统应该如何实例化它
COM机器极其复杂。例如,在C中实现或使用COM组件需要大量的工作,但是像Visual Basic这样的高级语言在简化COM组件的实现和使用方面做了很多工作。然而,好处是非常真实的。它使得在Visual Basic中编写应用程序成为可能,但仍然可以实现C或C++中的COM对象的性能关键算法,这些算法可以直接从VB代码中使用。系统负责整理方法调用参数,根据需要通过线程、进程和网络连接传递参数,以便客户机代码有使用普通对象的感觉

Windows的许多基本部分都基于COM。例如,Windows资源管理器(文件管理器)基本上是一个空壳。它定义了一组用于导航和显示树层次结构的COM接口,所有实际显示“我的电脑”、驱动器、文件夹和文件的代码都是一组实现这些接口的COM组件


随着.NET的出现,COM逐渐被淘汰。

最后一行的来源是什么?