【问题标题】:What is the exact function of CoCreateInstance?CoCreateInstance 的具体功能是什么?
【发布时间】:2009-09-08 21:48:54
【问题描述】:

我是一名 .NET 程序员,并且是 COM 新手。想简单了解一下CoCreateInstance的作用是什么?

【问题讨论】:

    标签: com


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-12
        • 2019-09-04
        • 2018-09-13
        • 1970-01-01
        • 2014-08-30
        • 2016-06-07
        • 2023-04-03
        相关资源
        最近更新 更多