Com CoCreateInstance的确切功能是什么?

Com CoCreateInstance的确切功能是什么?,com,Com,我是一名.NET程序员,刚接触COM。想简单地知道CoCreateInstance的功能是什么吗?简单地说,它用于创建一个类的实例,该类由GUID指定 HRESULT CoCreateInstance( __in REFCLSID rclsid, // which class you want __in LPUNKNOWN pUnkOuter, // used in aggregation __in DWORD dwClsContext, // how/where y

我是一名.NET程序员,刚接触COM。想简单地知道CoCreateInstance的功能是什么吗?

简单地说,它用于创建一个类的实例,该类由GUID指定

HRESULT CoCreateInstance(
  __in   REFCLSID rclsid,   // which class you want
  __in   LPUNKNOWN pUnkOuter, // used in aggregation
  __in   DWORD dwClsContext, // how/where you want the object created
  __in   REFIID riid, // which of the object's interfaces you want to use
  __out  LPVOID *ppv // where the pointer to the created object is placed
);

有关更多信息,请阅读。

您可以将
CoCreateInstance()
视为匿名工厂类的接口

在OOP中,使用工厂模式来调用创建方法并获取接口指针/引用通常是合理的,而不必知道接口后面到底是什么类。但是您仍然需要知道使用哪个类作为工厂。您也可以通过使用一些全局函数来隐藏它,但是您仍然需要知道它的名称和调用约定

CoCreateInstance更进一步—它还隐藏了factory类,并提供了一个系统范围的全局函数。您所提供的只是一个类id(它只是一个GUID)和一个接口id(它也是一个GUID)。您不知道实现在哪里以及它所使用的语言-COM处理所有这些,因为您的系统上有一个COM服务器,其中包含指定类id的实现,该实现公开了指定接口id的接口

调用系统范围的全局CoCreateInstance(),它会找到COM服务器(或失败),初始化它,要求它创建对象(可能失败),检索指向该对象的接口指针(也可能失败),并将此接口指针返回给您