Метод 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. При успешном выполнении реализация должна вызвать AddRef для *ppvObject; вызов 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, можно вызвать IBindCtx::GetBindOptions в параметре pbc , чтобы получить фактический параметр deadline.

Требования

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

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

IOleItemContainer