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

Создает новый моникер на основе префикса, который этот моникер имеет общее с указанным моникером.

Синтаксис

HRESULT CommonPrefixWith(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkPrefix
);

Параметры

[in] pmkOther

Указатель на интерфейс IMoniker на другой моникер для сравнения с этим, чтобы определить, есть ли общий префикс.

[out] ppmkPrefix

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

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

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

Код возврата Описание
S_OK
Существует общий префикс, который не является ни этим моникером, ни pmkOther.
MK_S_NOPREFIX
Общий префикс не существует.
MK_S_HIM
Весь pmkOther является префиксом этого моникера.
MK_S_US
Два моникера идентичны.
MK_S_ME
Это моникер является префиксом моникера pmkOther .
MK_S_NOTBINDABLE
Этот метод был вызван для относительного моникера. Не имеет смысла принимать общий префикс на относительном моникере.

Комментарии

CommonPrefixWith создает новый моникер, состоящий из общих префиксов моникера в этом объекте моникера и другого моникера. Например, если один моникер представляет путь "c:\projects\secret\art\pict1.bmp", а другой — путь "c:\projects\secret\docs\chap1.txt", общим префиксом этих двух моникеров будет моникер, представляющий путь "c:\projects\secret".

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

Метод CommonPrefixWith в основном вызывается в реализации метода IMoniker::RelativePathTo . Клиентам, использующим моникер для поиска объекта, редко требуется вызывать этот метод.

Вызывайте этот метод, только если pmkOther и этот моникер являются абсолютными моникерами. Абсолютный моникер — это либо моникер файла, либо универсальный составной элемент, крайний левый компонент которого является моникером файла, представляющим абсолютный путь. Не вызывайте этот метод на относительные моникеры, так как он не даст значимых результатов.

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

Реализация должна сначала определить, является ли pmkOther моникером распознаваемого класса и для которого можно предоставить специальную обработку (например, если он относится к тому же классу, что и этот моникер). В этом случае реализация должна определять общий префикс двух моникеров. В противном случае он должен передать оба моникера в вызове функции MonikerCommonPrefixWith , которая правильно обрабатывает универсальный регистр.

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

Реализация Примечания
Антимникер Если другой моникер также является антимоникером, метод возвращает MK_S_US и присваивает ppmkPrefix значение этого моникера. В противном случае метод вызывает функцию MonikerCommonPrefixWith . Эта функция правильно обрабатывает случай, когда другой моникер является универсальным составным элементом.
Моникер класса Если pmkOther равно этому моникеру, извлекает указатель на этот моникер и возвращает MK_S_US. Если pmkOther является моникером класса, но не равен этому моникеру, возвращает MK_E_NOPREFIX. В противном случае возвращает результат вызова MonikerCommonPrefixWith с именем pmkThis, pmkOther и ppmkPrefix, который обрабатывает случай, когда pmkOther является универсальным составным моникером.
Моникер файла Если оба моникера являются моникерами файлов, этот метод возвращает моникер файла, основанный на общих компонентах в начале двух моникеров файла. Компоненты моникера файла могут иметь следующие типы:
  • Имя компьютера в формате \\server\share. Имя компьютера рассматривается как один компонент, поэтому два моникера, представляющих пути "\\myserver\public\work" и "\\myserver\private\games", не имеют общего префикса "\\myserver".
  • Обозначение диска (например, "C:").
  • Имя каталога или файла.
Если другой моникер не является моникером файла, этот метод передает оба моникера в вызове функции MonikerCommonPrefixWith . Эта функция правильно обрабатывает случай, когда другой моникер является универсальным составным элементом.

Этот метод возвращает MK_E_NOPREFIX, если общий префикс отсутствует.

Универсальный составной моникер Если другой моникер является составным, этот метод сравнивает компоненты каждого составного элемента слева направо. Возвращенный общий моникер префикса также может быть составным моникером в зависимости от того, сколько левых компонентов было общим для обоих моникеров. Если другой моникер не является составным, метод просто сравнивает его с крайним левым компонентом этого моникера.

Если моникеры равны, метод возвращает MK_S_US и задает для ppmkPrefix значение этого моникера. Если другой моникер является префиксом этого моникера, метод возвращает MK_S_HIM и присваивает ppmkPrefix значение другого моникера. Если этот моникер является префиксом другого, этот метод возвращает MK_S_ME и присваивает ppmkPrefix значение этого моникера.

Если общий префикс отсутствует, этот метод возвращает MK_E_NOPREFIX и присваивает ppmkPrefix значение NULL.

Моникер элемента Если другой моникер является моникером элемента, равным этому моникеру, этот метод присваивает параметру *ppmkPrefix значение этого моникера и возвращает MK_S_US; В противном случае метод вызывает функцию MonikerCommonPrefixWith . Эта функция правильно обрабатывает случай, когда другой моникер является универсальным составным элементом.
Моникер OBJREF Если два моникера равны, этот метод возвращает MK_S_US и устанавливает для *ppmkPrefixзначение NULL. Если другой моникер не является моникером OBJREF, этот метод передает оба моникера в функцию MonikerCommonPrefixWith . Эта функция правильно обрабатывает случай, когда другой моникер является универсальным составным элементом.

Если общий префикс отсутствует, этот метод возвращает MK_E_NOPREFIX.

Моникер указателя Если два моникера равны, этот метод возвращает MK_S_US и присваивает параметру *ppmkPrefix значение этого моникера. В противном случае метод возвращает MK_E_NOPREFIX и устанавливает для *ppmkPrefixзначение NULL.
Моникер URL-адреса Этот метод возвращает E_NOTIMPL.

Требования

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

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

IMoniker

MonikerCommonPrefixWith