CoCreateInstance的确切功能是什么?

时间:2009-09-08 13:40:02

标签: com

我是一名.NET程序员,也是COM的新手。想简单地说一下CoCreateInstance的功能是什么?

2 个答案:

答案 0 :(得分:17)

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

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

CoCreateInstance更进一步 - 它也隐藏了工厂类,并提供了系统范围的全局功能。你提供的只是一个类id - 它只是一个GUID - 和一个接口id - 它也是一个GUID。您不知道实现的位置以及它所使用的语言 - COM处理所有这些,因为您的系统上有一个COM服务器,其中包含指定类ID的实现,该实现公开了指定接口ID的接口。

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

答案 1 :(得分:3)

简单地说,它用于创建类的实例,该类由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
);

有关详细信息,请阅读documentation