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


aggregatable

Указывает, что класс поддерживает агрегирование.

Синтаксис

[ aggregatable(value) ]

Параметры

значение
(Необязательно) Параметр, указывающий, когда объект COM можно агрегировать:

  • never Объект COM не может быть агрегирован.

  • allowed Объект COM можно создать напрямую или его можно агрегировать. Это значение по умолчанию.

  • always Объект COM не может быть создан напрямую и может быть агрегирован только. При вызове CoCreateInstance этого объекта необходимо указать интерфейс агрегатного объекта IUnknown (контролируемый IUnknown).

Замечания

Агрегируемый атрибут C++ имеет те же функции, что и агрегируемый атрибут MIDL. Это означает, что компилятор передает агрегируемый атрибут в созданный IDL-файл.

Этот атрибут требует, чтобы атрибут coclass, progidили vi_progid (или другой атрибут, который подразумевает один из них) также применялся к этому элементу. Если используется любой отдельный атрибут, два других применяются автоматически. Например, если progid применяется, vi_progid а coclass также применяется.

Проекты ATL

Если этот атрибут используется в проекте, где применяется ATL, поведение атрибута изменяется. Помимо описанного ранее поведения атрибут также добавляет один из следующих макросов в целевой класс:

Значение параметра Вставленный макрос
Never DECLARE_NOT_AGGREGATABLE
Allowed DECLARE_POLY_AGGREGATABLE
Always DECLARE_ONLY_AGGREGATABLE

Пример

// cpp_attr_ref_aggregatable.cpp
// compile with: /LD
#define _ATL_ATTRIBUTES
#include "atlbase.h"
#include "atlcom.h"

[module(name="MyModule")];

[ coclass, aggregatable(allowed),
  uuid("1a8369cc-1c91-42c4-befa-5a5d8c9d2529")]
class CMyClass {};

Требования

Контекст атрибута Значение
Относится к class, struct
Повторяемый No
Обязательные атрибуты Одно или несколько из следующих элементов: coclass, progidили vi_progid.
Недопустимые атрибуты нет

Дополнительные сведения о контекстах атрибутов см. в разделе Контексты атрибутов.

См. также

Атрибуты IDL
Атрибуты классов
Атрибуты Typedef, Enum, Union и Struct
Агрегат