Метод 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 для привязки к объекту, а затем попытаться выполнить операцию Treat As... или Convert To... для связывания объекта с другим сервером. В случае успешного выполнения вызывающий объект может повторить операцию привязки.
Клиент моникера с подробным знанием реализации моникера также может вызывать этот метод для передачи личной информации в эту реализацию.

Вы можете определить новые строки в качестве ключей для хранения указателей. По соглашению следует использовать имена ключей, которые начинаются со строковой формы CLSID класса моникера. (См. функцию StringFromCLSID .)

Если параметр pszKey соответствует имени существующего ключа в таблице контекста привязки, новый объект заменяет существующий объект в таблице.

При регистрации объекта с помощью этого метода объект не освобождается, пока не произойдет одно из следующих действий:

  • Он заменяется в таблице другим объектом с тем же ключом.
  • Он удаляется из таблицы путем вызова метода IBindCtx::RevokeObjectParam.
  • Контекст привязки освобождается. Все зарегистрированные объекты освобождаются при освобождении контекста привязки.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h

См. также раздел

IBindCtx