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