Функция MkParseDisplayName (objbase.h)

Преобразует строку в моникер, идентифицирующий объект с именем в строке.

Эта функция является обратной операцией IMoniker::GetDisplayName , которая извлекает отображаемое имя, связанное с моникером.

Синтаксис

HRESULT MkParseDisplayName(
  [in]  LPBC      pbc,
  [in]  LPCOLESTR szUserName,
  [out] ULONG     *pchEaten,
  [out] LPMONIKER *ppmk
);

Параметры

[in] pbc

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

[in] szUserName

Указатель на отображаемое имя для анализа.

[out] pchEaten

Указатель на количество использованных символов szUserName . Если функция выполнена успешно, *pchEaten — это длина szUserName; В противном случае — это число успешно проанализированных символов.

[out] ppmk

Адрес переменной указателя IMoniker*, получающей указатель интерфейса на моникер, созданный из szUserName. При успешном выполнении функция вызывает AddRef для моникера, а вызывающий объект отвечает за вызов Release. При возникновении ошибки указанный указатель интерфейса будет содержать столько моникера, которое метод смог создать до возникновения ошибки.

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

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

Код возврата Описание
S_OK
Операция синтаксического анализа прошла успешно, и был создан моникер.
MK_E_SYNTAX
Ошибка в синтаксисе имени файла или ошибка в синтаксисе результирующего составного моникера.
 

Эта функция также может возвращать любые значения ошибок, возвращаемые IMoniker::BindToObject, IOleItemContainer::GetObject или IParseDisplayName::P arseDisplayName.

Комментарии

Функция MkParseDisplayName анализирует понятное имя в моникер, который можно использовать для идентификации источника ссылок. Результирующий моникер может быть простым моникером (например, файловый моникер) или универсальным составным элементом, состоящим из частей моникера компонента. Например, отображаемое имя "c:\mydir\somefile!item 1"

может быть проанализирован в следующий универсальный составной моникер: FileMoniker на основе "c:\mydir\somefile") + (ItemMoniker на основе "item 1").

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

Анализ отображаемого имени часто требует активации тех же объектов, которые будут активированы во время операции привязки, поэтому это может быть столь же затратным (с точки зрения производительности), как и привязка. Объекты, привязанные во время операции синтаксического анализа, кэшируются в контексте привязки, передаваемом в функцию. Если вы планируете привязать моникер, возвращенный MkParseDisplayName, лучше сделать это сразу после возврата функции, используя тот же контекст привязки, который устраняет необходимость повторной активации объектов.

MkParseDisplayName анализирует столько отображаемого имени, сколько оно понимает, в моникер. Затем функция вызывает IMoniker::P arseDisplayName во вновь созданном моникере, передав оставшуюся часть отображаемого имени. Моникер, возвращаемый ParseDisplayName , состоит в конце существующего моникера, и, если какое-либо отображаемое имя остается без анализа, ParseDisplayName вызывается в результате композиции. Этот процесс повторяется до тех пор, пока не будет проанализировано все отображаемое имя.

MkParseDisplayName пытается выполнить синтаксический анализ начала отображаемого имени с помощью первой успешной стратегии.

  1. Функция ищет в таблице выполняющихся объектов моникеры файлов, соответствующие всем префиксам отображаемого имени, состоящим исключительно из допустимых символов имени файла. Эта стратегия позволяет определить документы, которые еще не сохранены.
  2. Функция проверяет максимальный префикс отображаемого имени, состоящего исключительно из допустимых символов имени файла, чтобы узнать, зарегистрирован ли документ OLE 1 этим именем. В этом случае возвращенный моникер является внутренним моникером, предоставляемым уровнем совместимости OLE 1 OLE 2.
  3. Функция обращается к файловой системе, чтобы проверка, соответствует ли префикс отображаемого имени существующему файлу. Имя файла может быть абсолютным, относительным диском, относительным рабочим каталогом или начинаться с явного имени общей сетевой папки. Это стандартный вариант.
  4. Если начальным символом отображаемого имени является "@", функция находит после нее самую длинную строку, соответствующую синтаксису ProgID. Функция преобразует эту строку в CLSID с помощью функции CLSIDFromProgID . Если CLSID представляет класс OLE 2, функция загружает соответствующий объект класса и запрашивает указатель интерфейса IParseDisplayName . Затем полученному интерфейсу IParseDisplayName предоставляется вся строка для анализа, начиная с @. Если CLSID представляет класс OLE 1, то функция обрабатывает строку, следующую за ProgID, как конструктор ссылок OLE1/DDE с синтаксисомэлементаимени| файла.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objbase.h
Библиотека Ole32.lib
DLL Ole32.dll
Набор API ext-ms-win-com-ole32-l1-1-1 (появилось в Windows 8.1)

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

IMoniker::GetDisplayName

IMoniker::P arseDisplayName

IParseDisplayName