请输入您要查询的百科知识:

 

词条 CoCreateInstance
释义

函数功能描述:

用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。当在本机中只创建一个对象时,可以调用CoCreateInstance;在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数。

函数原形

STDAPI CoCreateInstance(

REFCLSID rclsid, //创建的Com对象的类标识符(CLSID)

LPUNKNOWN pUnkOuter, //指向接口IUnknown的指针

DWORD dwClsContext, //运行可执行代码的上下文

REFIID riid, //创建的Com对象的接口标识符

LPVOID * ppv //用来接收指向Com对象接口地址的指针变量

);

参数:

rclsid

 [in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。

pUnkOuter

[in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。

dwClsContext

 [in] 组件类别. 可使用CLSCTX枚举器中预定义的值.

可选取值如下:

CLSCTX_INPROC_SERVER 创建在同一进程中运行的组件。为能够同一进程中运行,
组件必须是在DLL中实现的。

CLSCTX_INPROC_HANDLER 创建进程中处理器。一个进程中处理器实际上是一个
只实现了某个组建一部分的进程中组件。该组件的其他部分将
由本地或远程服务器上的某个进程外组件实现。

CLSCTX_LOCAL_SERVER 创建一个在同一机器上的另外一个进程中运行的组件。
本地服务器是由exe实现的。

CLSCTX_REMOTE_SERVER 创建一个在远程机器上运行的组件。此标志需要分布式
COM正常工作。 相关的组合值:

CLSCTX_INPROC CLSCTX_LOCAL_SERVER
CLSCTX_INPROC_HANDLER

CLSCTX_ALL CLSCTX_INPROC_SERVER
CLSCTX_INPROC_HANDLER
CLSCTX_LOCAL_SERVER
CLSCTX_REMOTE_SERVER

CLSCTX_SERVER CLSCTX_INPROC_SERVER
CLSCTX_LOCAL_SERVER
CLSCTX_REMOTE_SERVERriid

[in] 引用接口标识符,用来与对象通信。

ppv

[out] 用来接收指向接口地址的指针变量。如果函数调用成功,*ppv包括请求的接口指针。

返回值

S_OK

指定的Com对象实例被成功创建。

REGDB_E_CLASSNOTREG

指定的类没有在注册表中注册. 也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏

CLASS_E_NOAGGREGATION

这个类不能创建为聚合型。

E_NOINTERFACE

指定的类没有实现请求的接口, 或者是IUnknown接口没有暴露请求的接口.

注释:

CoCreateInstance帮助者函数通过使用对象的CLSID,提供了一种便洁的方式与类对象连接,创建未初始化的实例,以及释放类对象。它封装了以下的功能:

CoGetClassObject(rclsid,NULL ,dwClsContext, IID_IClassFactory, &pCF);

hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj);

pCF->Release();

当在本机中只创建一个对象时,调用CoCreateInstance是最方便的;如果要在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数;如果创建多个对象实例,可以获得类对象的IClassFactory 接口指针,并使用需要的方法,可以使用CoGetClassObject函数。

在CLSCTX枚举器中, 你可以指定用来管理对象的服务器类型. 这些常量可以是CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER或是它们的任何组合. 常量CLSCTX_ALL被定义为这三个值的组合. 想获得更多的有关这些常量的用法,请参考CLSCTX.

实例:

if ( SUCCEEDED( CoInitialize(NULL) ) )

{

// 如果成功初始化COM库,则继续初始化并运行应用程序...

// 对于Win32应用程序, CoInitialize函数的pvReserved参数,必须为NULL. 此参数不能被用于32位COM,

// CoInitialize将会返回E_INVALIDARG,如果传递一个非NULL参数.

}

else

{

// 如果初始化COM库失败,则退出.

}

HRESULT hr;

IComObject *pRet;

hr = CoCreateInstance(CLSID_OFCOM,NULL,CLSCTX_INPROC_SERVER,IID_OFCOMOBJECT,

(PPVOID)&pRet);

if (SUCCEEDED(hr))

{

// 卸载不用的COM服务.

CoFreeUnusedLibraries();

}

else

...

...

pRet->Release();

CoUninitialize();

要求:

Windows NT/2000: 需要 Windows NT 3.1或以后版本。

Windows 95/98: 需要 Windows 95 或以后版本。

头文件 : objbase.h.

库文件 : ole32.dll.

参看

CoGetClassObject, IClassFactory::CreateInstance, CoCreateInstanceEx, CLSCTX, (实例创建帮助函数)Instance Creation Helper Functions

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/7 16:12:57