IObjectContext::CreateInstance 方法 (comsvcs.h)

使用当前 对象的上下文创建对象。

语法

HRESULT CreateInstance(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

参数

[in] rclsid

要实例化的对象类型的 CLSID。

[in] riid

要实例化的对象实现的任何接口。

[out] ppv

对新 对象上请求的接口的引用。 如果实例化失败,此参数将设置为 NULL

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
该方法已成功完成。
REGDB_E_CLASSNOTREG
clsid 指定的组件未注册为 COM 组件。
E_OUTOFMEMORY
没有足够的内存可用于实例化对象。
E_INVALIDARG
ppvObj 参数中传递的参数无效。
E_UNEXPECTED
发生了意外错误。 如果一个对象将其 IObjectContext 指针传递给另一个对象,而另一个对象使用此指针调用 CreateInstance, 则可能会发生这种情况。 IObjectContext 指针在最初获取它的对象的上下文之外无效。

注解

CreateInstance 创建 COM 对象。 但是,仅当对象组件注册到 COM+ 时,对象才具有上下文。

使用 CreateInstance 创建对象时,新对象的上下文派生自当前对象的 IObjectContext 和新对象的组件的声明性属性。 新对象始终在创建它的对象所在的同一活动内执行。 如果当前对象具有事务,则新对象的组件的事务属性确定新对象是否在该事务的范围内执行。

如果组件的事务属性设置需要事务或支持事务,则新对象将继承其创建者的事务。 如果组件的事务属性需要新事务,COM+ 会为新对象启动一个新事务。 如果组件的事务属性不支持事务,则新对象不会在任何事务下执行。

CreateInstance 始终返回新实例化对象上的 IUnknown 接口。 应立即将返回的值强制转换为要通过该接口与新对象进行通信的接口。 传入 riid 参数的接口 ID 不需要与将返回值强制转换为的接口相同,但它必须是由要实例化的对象实现的接口。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 comsvcs.h

另请参阅

IObjectContext