Метод 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, а также следующие значения.
Код возврата | Описание |
---|---|
|
Существует общий префикс, который не является ни этим моникером, ни pmkOther. |
|
Общий префикс не существует. |
|
Весь pmkOther является префиксом этого моникера. |
|
Два моникера идентичны. |
|
Это моникер является префиксом моникера pmkOther . |
|
Этот метод был вызван для относительного моникера. Не имеет смысла принимать общий префикс на относительном моникере. |
Комментарии
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 является универсальным составным моникером. |
Моникер файла |
Если оба моникера являются моникерами файлов, этот метод возвращает моникер файла, основанный на общих компонентах в начале двух моникеров файла. Компоненты моникера файла могут иметь следующие типы:
Этот метод возвращает 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 |