CoGetDefaultContext 函数 (combaseapi.h)

检索对指定单元的默认上下文的引用。

语法

HRESULT CoGetDefaultContext(
  [in]  APTTYPE aptType,
  [in]  REFIID  riid,
  [out] void    **ppv
);

参数

[in] aptType

所请求的默认上下文的单元类型。 此参数的取值可为下列值之一:

含义
APTTYPE_CURRENT
-1
调用方的公寓。
APTTYPE_MTA
1
当前进程的多线程单元。
APTTYPE_NA
2
当前进程的中性单元。
APTTYPE_MAINSTA
3
当前进程的main单线程单元。
 

不支持 APTTYPE 值APTTYPE_STA (0) 。 一个进程可以包含多个单线程单元,每个单元都有自己的上下文,因此 CoGetDefaultContext 无法确定哪个 STA 感兴趣。 因此,如果指定了APTTYPE_STA,此函数将返回E_INVALIDARG。

[in] riid

接口标识符 (在默认上下文中请求的接口的 IID) 。 通常,调用方请求IID_IObjectContext。 默认上下文不支持所有正常的对象上下文接口。

[out] ppv

对默认上下文中 riid 指定的接口的引用。 如果对象的组件未配置, (也就是说,对象的组件尚未导入 COM+ 应用程序) ,或者如果从构造函数或 IUnknown 方法调用 CoGetDefaultContext 函数,则此参数设置为 NULL 指针。

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
该方法已成功完成。
E_INVALIDARG
其中一个参数无效。
CO_E_NOTINITIALIZED
调用方不在初始化的单元中。
E_NOINTERFACE
对象上下文不支持 riid 指定的接口。

注解

每个 COM 单元都有一个称为默认上下文的特殊上下文。 默认上下文不同于单元中所有其他非默认上下文,因为它不提供运行时服务。 它不支持所有常规对象上下文接口。

默认上下文也由未配置的 COM 组件的实例使用, (也就是说,从不支持其线程模型的单元创建的 COM+ 应用程序) 的组件。 换句话说,如果 COM 对象创建了未配置的组件的实例,并且由于其线程模型而无法将新对象添加到其创建者的上下文中,则会将新对象添加到支持其线程模型的单元的默认上下文中。

对象不应将 IObjectContext 引用传递给另一个对象。 如果将 IObjectContext 引用传递给另一个对象,则它不再是有效的引用。

当对象获取对 IObjectContext 的引用时,它必须在使用完 IObjectContext 对象时释放该对象。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 combaseapi.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

COM+ 上下文和线程模型