CComCoClass::CreateInstance

使用这些 CreateInstance 函数创建COM对象的实例并检索接口指针,而不使用COM API。

template <class Q>
static HRESULT CreateInstance(
   Q** pp 
);
template <class Q>
static HRESULT CreateInstance(
   IUnknown* punkOuter,
   Q** pp 
);

参数

  • Q
    应通过 pp返回的COM接口。

  • punkOuter
    [in]聚合的外部未知或控件未知。

  • pp
    [in]接收请求的接口指针指针变量的地址,如果创建成功。

返回值

标准 HRESULT 值。为阐释了可能参见。Windows SDK 的 CoCreateInstance 返回值。

备注

对于典型的对象创建使用此功能第一个重载;,在需要聚合之后,的对象使用第二个重载。

实现必需的COM对象(即选件类的ATL选件类用作第一个模板参数传递到 CComCoClass)必须在项目和调用代码相同。COM对象的创建由此ATL选件类中的选件类工厂执行。

这些功能为创建您已阻止在外部创建使用 OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO 宏的对象很有用。它们还可用于要为有效的目的避免COM API的情况。

请注意接口 Q 必须具有IID与使用 __uuidof 运算符,可以检索它的。

示例

在下面的示例中,CDocument 是实现 IDocument 接口从 CComCoClass 派生的向导生成的ATL选件类。选件类与 OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO 宏的对象映射注册为使用 CoCreateInstance,因此,客户端无法创建该文档的实例。CApplication 是在其自己的COM接口之一提供方法创建文档选件类的实例的CoClass。在下面的代码示例演示如何轻松地创建文档的实例将该类使用从 CComCoClass 基类继承的 CreateInstance 成员。

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

要求

Header: atlcom.h

请参见

参考

CComCoClass选件类