Поделиться через


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

Уменьшает моникер до простейшей формы.

Синтаксис

HRESULT Reduce(
  [in]      IBindCtx *pbc,
  [in]      DWORD    dwReduceHowFar,
  [in, out] IMoniker **ppmkToLeft,
  [out]     IMoniker **ppmkReduced
);

Параметры

[in] pbc

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

[in] dwReduceHowFar

Определяет способ уменьшения моникера. Этот параметр должен быть одним из значений перечисления MKRREDUCE .

[in, out] ppmkToLeft

При входе — указатель на переменную указателя IMoniker , содержащую указатель интерфейса на моникер слева от этого моникера. Этот параметр используется главным образом средствами реализации моникеров для обеспечения взаимодействия между различными компонентами составного моникера; клиенты моникера обычно могут передавать значение NULL.

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

[out] ppmkReduced

Указатель на переменную указателя IMoniker , которая получает указатель интерфейса на уменьшенную форму этого моникера, которая может иметь значение NULL при возникновении ошибки или если этот моникер сводится к нулю. Если этот моникер не может быть уменьшен, параметру *ppmkReduced просто присваивается значение этого моникера, а возвращаемое значение — MK_S_REDUCED_TO_SELF. Если значение *ppmkReduced не равно NULL, реализация должна вызывать AddRef для нового моникера; Вызов release лежит на вызывающем объекте. (Это верно, даже если для параметра *ppmkReduced задано значение этого моникера.)

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

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

Код возврата Описание
S_OK
Метод завершился успешно.
MK_S_REDUCED_TO_SELF
Этот моникер не может быть уменьшен дальше, поэтому ppmkReduced указывает на это моникер.
MK_E_EXCEEDEDDEADLINE
Операция не может быть завершена в течение времени, заданного структурой BIND_OPTS контекста привязки.

Комментарии

Этот метод предназначен для следующих применений:

  • Включите создание определяемых пользователем макросов или псевдонимов в качестве новых типов классов моникера. При уменьшении значения возвращается моникер, до которого вычисляется макрос.
  • Включите создание своего рода моникера, который отслеживает данные по мере их перемещения. При уменьшении значения возвращается моникер данных в текущем расположении.
  • В файловых системах, поддерживающих основанный на идентификаторе метод доступа к файлам, не зависящий от имен файлов; Моникер файла может быть уменьшен до моникера, содержащего один из этих идентификаторов.
Цель флагов MKRREDUCE , передаваемых в параметре dwReduceHowFar , заключается в том, чтобы предоставить возможность программного сокращения моникера до формы, отображаемое имя которой распознано пользователю. Например, пути в файловой системе, закладки в текстовых документах и имена диапазонов в электронных таблицах распознаются пользователями. В отличие от этого, макрос или псевдоним, инкапсулированный в моникер, не распознаются пользователями.

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

Описанные выше сценарии в настоящее время не реализуются классами моникера, предоставляемыми системой.

Необходимо вызвать Reduce перед сравнением двух моникеров с помощью метода IMoniker::IsEqual , так как сокращенный моникер находится в наиболее конкретной форме. IsEqual может вернуть S_FALSE на два моникера, прежде чем они будут сокращены, и вернуть S_OK после их уменьшения.

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

Если текущий моникер можно уменьшить, реализация не должна уменьшать его на месте. Вместо этого он должен возвращать новый моникер, представляющий уменьшенное состояние текущего. Таким образом, вызывающий объект по-прежнему имеет возможность использовать неотреживаемое моникер (например, перечисление его компонентов). Реализация должна уменьшить моникер по крайней мере насколько это требуется.

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

Реализация Примечания
Антимникер Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Моникер класса Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Моникер файла Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Универсальный составной моникер Этот метод рекурсивно вызывает Reduce для каждого моникера компонента. Если какой-либо из компонентов уменьшает сам себя, метод возвращает S_OK и передает обратно составную часть уменьшенных компонентов. Если сокращения не произошло, метод передает обратно тот же моникер и возвращает MK_S_REDUCED_TO_SELF.
Моникер элемента Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Моникер OBJREF Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Моникер указателя Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.
Моникер URL-адреса Этот метод возвращает MK_S_REDUCED_TO_SELF и передает обратно тот же моникер.

Требования

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

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

IMoniker