IOleItemContainer::GetObject 方法 (oleidl.h)

检索指向指定对象的指针。

语法

HRESULT GetObject(
  [in]  LPOLESTR pszItem,
  [in]  DWORD    dwSpeedNeeded,
  [in]  IBindCtx *pbc,
  [in]  REFIID   riid,
  [out] void     **ppvObject
);

参数

[in] pszItem

所请求对象的容器名称。

[in] dwSpeedNeeded

指示调用方将等待获取对象的大致时间。 可能的值取自枚举 BINDSPEED

[in] pbc

指向要在此绑定操作中使用的绑定上下文对象上的 IBindCtx 接口的指针。 绑定上下文缓存绑定过程中绑定的对象,包含应用于使用绑定上下文的所有操作的参数,并提供绑定实现应检索有关其环境的信息的方法。

[in] riid

对所请求的接口指针标识符的引用。

[out] ppvObject

接收 riid 中请求的接口指针的指针变量的地址。 成功返回后,*ppvObject 包含指向 pszItem 命名对象的请求接口指针。 成功后,实现必须在 *ppvObject 上调用 AddRef;调用方负责调用 Release。 如果发生错误,实现会将 *ppvObject 设置为 NULL

返回值

此方法可以返回E_OUTOFMEMORY的标准返回值,以及以下值。

返回代码 说明
S_OK
该方法已成功完成。
MK_E_EXCEEDEDDEADLINE
绑定操作无法在绑定上下文 的BIND_OPTS 结构指定的时间限制内完成,也无法以 dwSpeedNeeded 参数指示的速度完成。
MK_E_NOOBJECT
参数 pszItem 不标识此容器中的对象。
E_NOINTERFACE
请求的接口不可用。

注解

IMoniker::BindToObject 的项名字对象实现调用此方法,并将存储在项名字对象中的名称作为 pszItem 参数传递。

实施者说明

IOleItemContainer::GetObject 的实现应首先确定 pszItem 是否是容器对象之一的有效名称。 否则,应返回MK_E_NOOBJECT。

如果 pszItem 命名嵌入式或链接对象,则实现必须检查 dwSpeedNeeded 参数的值。 如果值BINDSPEED_IMMEDIATE且对象尚未加载,则应返回MK_E_EXCEEDEDDEADLINE。 如果加载对象,则实现应确定对象是否 (运行,例如,通过) 调用 OleIsRunning 函数。 如果它未运行且 dwSpeedNeeded 值BINDSPEED_MODERATE,则实现应返回MK_E_EXCEEDEDDEADLINE。 如果对象未运行且 dwSpeedNeeded BINDSPEED_INDEFINITE,则实现应调用 OleRun 函数,以将对象置于运行状态。 然后,它可以查询 对象以获取请求的接口。 请注意,在查询接口之前,必须运行 对象。

如果 pszItem 命名为伪对象,则实现可以忽略 dwSpeedNeeded 参数,因为伪对象在容器运行时正在运行。 在这种情况下,实现只需查询请求的接口即可。

如果需要比 dwSpeedNeeded 提供的更具体的时间限制信息,可以调用对pbc 参数的 IBindCtx::GetBindOptions 获取实际的截止时间参数。

要求

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

另请参阅

IOleItemContainer