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

Выполняет универсальную композицию из двух моникеров и предоставляет указатель на результирующий составной моникер.

Синтаксис

HRESULT CreateGenericComposite(
  [in, optional] LPMONIKER pmkFirst,
  [in, optional] LPMONIKER pmkRest,
  [out]          LPMONIKER *ppmkComposite
);

Параметры

[in, optional] pmkFirst

Указатель на моникер, состоящий слева от моникера, на который указывает pmkRest. Может указывать на любой вид моникера, включая универсальный составной.

[in, optional] pmkRest

Указатель на моникер, состоящий справа от моникера, на который указывает pmkFirst . Может указывать на любой вид моникера, совместимый с типом моникера pmkRest , включая универсальный составной элемент.

[out] ppmkComposite

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

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

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

Код возврата Описание
S_OK
Входные моникеры были успешно составлены.
MK_E_SYNTAX
Не удалось создать два моникера из-за ошибки в синтаксисе пути (например, если и pmkFirst, и pmkRest являются моникеры файла на основе абсолютных путей).

Комментарии

CreateGenericComposite объединяет два моникера в один. Объединяемые классы моникеров могут быть разными, подчиняясь только правилам композиции. Вызывайте эту функцию, только если вы пишете новый класс моникера путем реализации интерфейса IMoniker в реализации IMoniker::ComposeWith , которая включает универсальную возможность композиции.

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

В процессе создания двух моникеров CreateGenericComposite делает все возможные упрощения. Рассмотрим пример, где pmkFirst — это универсальный составной моникер, A + B + C, а pmkRest — универсальный составной моникер, C -1 + B –1 + Z (где C -1 — это обратное значение C). Функция сначала компонует C до C -1, которая не состоит из ничего. Затем он составляет B и B -1 к пусту. Наконец, он составляет от A до Z и предоставляет указатель на универсальный составной моникер A + Z.

Требования

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

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

IMoniker

IMoniker::ComposeWith