IBindCtx::RegisterObjectParam 方法 (objidl.h)

将 对象与绑定上下文的字符串键型指针表中的字符串键相关联。

语法

HRESULT RegisterObjectParam(
  [in] LPOLESTR pszKey,
  [in] IUnknown *punk
);

参数

[in] pszKey

要在其中注册对象的 绑定上下文字符串键 。 键字符串比较区分大小写。

[in] punk

指向要注册的对象上的 IUnknown 接口的指针。

方法对指针调用 AddRef

返回值

此方法可以返回E_OUTOFMEMORY和S_OK的标准返回值。

注解

绑定上下文维护一个接口指针表,每个指针都与一个字符串键相关联。 这样就可以在名字对象实现与发起绑定操作的调用方之间进行通信。 一方可以将接口指针存储在双方已知的字符串下,以便另一方以后可以从绑定上下文中检索它。

使用此方法之后的绑定操作可以使用 IBindCtx::GetObjectParam 检索存储的指针。

给调用方的说明

RegisterObjectParam 对于通过 IMoniker) 实现 (实现新名字对象类的用户以及使用名字对象绑定到对象) (名字对象客户端非常有用。

在实现新的名字对象类时,可以在名字对象绑定期间发生错误时调用此方法,以通知调用方错误的原因。 通过调用此方法获得的密钥将取决于错误条件。 下面是常见名字对象绑定错误的列表,其中描述了每个适合的键:

  • MK_E_EXCEEDEDDEADLINE:如果绑定操作由于给定对象未运行而超过其截止时间,则应使用列表中的第一个未使用的键注册对象的名字对象:“ExceededDeadline”、“ExceededDeadline1”、“ExceededDeadline2”等。 如果调用方稍后在运行的对象表中找到了名字对象,则调用方可以重试绑定操作。
  • MK_E_CONNECTMANUALLY:“ConnectManually”键指示绑定需要最终用户帮助的名称对象。 若要请求最终用户手动连接到对象,调用方可以在显示名字对象的显示名称后重试绑定操作。 此错误的常见原因是需要密码或需要装载软盘。
  • E_CLASSNOTFOUND:“ClassNotFound”键指示找不到其类的名称对象。 (无法找到此名字对象所标识对象的服务器。) 如果此键用于 OLE 复合文档对象,调用方可以使用 IMoniker::BindToStorage 绑定到对象,然后尝试执行 “处理为...” 或“ 转换为...” 操作,以将对象与其他服务器关联。 如果此操作成功,调用方可以重试绑定操作。
对名字对象实现有详细了解的名称对象客户端也可以调用此方法,将私人信息传递给该实现。

可以将新字符串定义为用于存储指针的键。 按照约定,应使用以名字对象类 CLSID 的字符串形式开头的键名称。 (请参阅 StringFromCLSID 函数。)

如果 pszKey 参数与绑定上下文表中现有键的名称匹配,则新对象将替换表中的现有对象。

使用此方法注册对象时,在发生以下任一情况之前,不会释放对象:

  • 它在表中由具有相同键的另一个对象替换。
  • 它通过调用 IBindCtx::RevokeObjectParam 从表中删除。
  • 释放绑定上下文。 释放绑定上下文时,将释放所有已注册的对象。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidl.h

另请参阅

IBindCtx