Метод IMoniker::P arseDisplayName (objidl.h)

Преобразует отображаемое имя в моникер.

Синтаксис

HRESULT ParseDisplayName(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  LPOLESTR pszDisplayName,
  [out] ULONG    *pchEaten,
  [out] IMoniker **ppmkOut
);

Параметры

[in] pbc

Указатель на интерфейс IBindCtx в контексте привязки, который будет использоваться в этой операции привязки. Контекст привязки кэширует объекты, привязанные к процессу привязки, содержит параметры, которые применяются ко всем операциям, использующим контекст привязки, и предоставляет средства, с помощью которых реализация моникера должна извлекать сведения о своей среде.

[in] pmkToLeft

Указатель на интерфейс IMoniker в моникере, созданном на основе отображаемого имени до этого момента.

[in] pszDisplayName

Оставшееся отображаемое имя для анализа.

[out] pchEaten

Указатель на переменную, которая получает количество символов в pszDisplayName , которые были использованы на этом шаге.

[out] ppmkOut

Указатель на переменную указателя IMoniker , которая получает указатель интерфейса на моникер, созданный из pszDisplayName. При успешном выполнении реализация должна вызвать AddRef для нового моникера; Вызов release лежит на вызывающем объекте. При возникновении ошибки реализация устанавливает для *ppmkOutзначение NULL.

Возвращаемое значение

Этот метод может возвращать стандартные возвращаемые valuesE_OUTOFMEMORY и E_UNEXPECTED, а также следующие значения.

Код возврата Описание
S_OK
Операция синтаксического анализа успешно завершена.
MK_E_SYNTAX
Ошибка в синтаксисе входных компонентов (pmkToLeft, это моникер и pszDisplayName). Например, моникер файла возвращает эту ошибку, если значение pmkToLeft не равно NULL, а моникер элемента возвращает его, если pmkToLeft имеет значение NULL.
 

Этот метод также может возвращать ошибки, связанные с методом IMoniker::BindToObject .

Комментарии

Примечания к вызывающим абонентам

Клиенты моникера обычно не вызывают ParseDisplayName напрямую. Вместо этого они вызывают функцию MkParseDisplayName , когда нужно преобразовать отображаемое имя в моникер (например, при реализации диалогового окна Ссылки для приложения-контейнера или для реализации языка макросов, поддерживающего ссылки на объекты за пределами документа). Эта функция сначала анализирует начальную часть самого отображаемого имени.

Затем он вызывает ParseDisplayName в только что созданном моникере, передавая оставшуюся часть отображаемого имени и получая взамен новое моникер; Этот шаг повторяется до тех пор, пока не будет проанализировано все отображаемое имя.

Примечания для разработчиков

Реализация может выполнять этот анализ самостоятельно, если класс моникера предназначен для обозначения только определенных типов объектов. В противном случае необходимо получить указатель интерфейса IParseDisplayName для объекта, определяемого моникером (т. е. композицией pmkToLeft и этого моникера), а затем вернуть результаты вызова IParseDisplayName::P arseDisplayName.

Существуют различные стратегии получения указателя IParseDisplayName , как показано ниже.

  • Вы можете попытаться получить ИДЕНТИФИКАТОР CLSID объекта (путем вызова IPersist::GetClassID для объекта), а затем вызвать функцию CoGetClassObject , запросив интерфейс IParseDisplayName в фабрике классов, связанной с этим ИДЕНТИФИКАТОРом CLSID.
  • Вы можете попытаться выполнить привязку к самому объекту, чтобы получить указатель IParseDisplayName .
  • Можно попробовать выполнить привязку к объекту, определенному pmkToLeft , чтобы получить указатель IOleItemContainer , а затем вызвать IOleItemContainer::GetObject , чтобы получить указатель IParseDisplayName для элемента.
Все привязанные объекты должны быть зарегистрированы с помощью контекста привязки (см. раздел IBindCtx::RegisterObjectBound), чтобы обеспечить их выполнение в течение операции синтаксического анализа.

Примечания, относящиеся к реализации

Реализация Примечания
Антимникер Этот метод возвращает E_NOTIMPL.
Моникер класса Этот метод анализирует отображаемое имя путем привязки к себе для IParseDisplayName и запроса привязанного объекта на синтаксический анализ отображаемого имени в моникер, как показано ниже.
  hr = BindToObject(pbc, pmkToLeft, IID_IParseDisplayName, (void**)&ppdn);
  if (SUCCEEDED(hr)) {
    hr = ppdn->ParseDisplayName(pbc, lpszDisplayName, pchEaten, ppmkOut);
    ppdn->Release();
  }
  return hr;

Этот метод пытается получить указатель IParseDisplayName сначала путем привязки к фабрике класса для объекта, определяемого моникером, а затем путем привязки к самому объекту. При успешном выполнении любой из этих операций привязки моникер файла передает непарованную часть отображаемого имени методу IParseDisplayName::P arseDisplayName .

Этот метод возвращает MK_E_SYNTAX, если значение pmkToLeft не равно NULL.

Моникер файла Этот метод пытается получить указатель IParseDisplayName сначала путем привязки к фабрике класса для объекта, определяемого моникером, а затем путем привязки к самому объекту. При успешном выполнении любой из этих операций привязки моникер файла передает непарованную часть отображаемого имени методу IParseDisplayName::P arseDisplayName .
Универсальный составной моникер Этот метод рекурсивно вызывает IMoniker::P arseDisplayName в крайнем правом компоненте составного компонента, передавая все остальное в качестве параметра pmkToLeft для этого вызова.
Моникер элемента Если pmkToLeft имеет значение NULL, этот метод возвращает MK_E_SYNTAX. В противном случае метод вызывает IMoniker::BindToObject для параметра pmkToLeft , запрашивая указатель интерфейса IOleItemContainer . Затем метод вызывает IOleItemContainer::GetObject, запрашивая указатель интерфейса IParseDisplayName на объект, идентифицируемый моникером, и передает отображаемое имя в IParseDisplayName::P arseDisplayName.
Моникер OBJREF Если значение pmkToLeft не равно NULL, этот метод возвращает MK_E_SYNTAX.
Моникер указателя Этот метод запрашивает заключенный в оболочку указатель для интерфейса IParseDisplayName и передает отображаемое имя в IParseDisplayName::P arseDisplayName.
Моникер URL-адреса Анализирует полную или частичную строку URL-адреса в моникер результата (ppmkOut). Если szDisplayName представляет полную строку URL-адреса (например, "http://foo.com/default.html"), результатом будет новый полный моникер URL-адреса. Если szDisplayName представляет частичную строку URL-адреса (например, ".. \default.html"), результатом является полный URL-адрес, который принимает свой контекст из SZ_URLCONTEXT object-parameter контекста привязки или из этого моникера URL-адреса. Например, если контекстный моникер был "http://foo.com/pub/list.html", а szDisplayName — ".. \default.html" результирующий моникер URL-адреса будет представлять "http://foo.com/default.html".

Требования

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

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

IMoniker

IParseDisplayName

MkParseDisplayName