aggregatable
クラスが集約をサポートしていることを示します。
[ aggregatable(
value
) ]
パラメータ
value (省略可能)
COM オブジェクトを集約できる場合を示します。never COM オブジェクトを集約できません。
allowed COM オブジェクトを、直接作成することも、集約することもできます。これは、既定の設定です。
always COM オブジェクトは直接作成できませんが、集約できます。このオブジェクトに対して CoCreateInstance を呼び出す場合は、集約するオブジェクトの IUnknown インターフェイス (制御側の IUnknown) を指定する必要があります。
解説
C++ 属性 aggregatable の機能は、Microsoft インターフェイス定義言語 (MIDL: Microsoft Interface Definition Language) 属性 aggregatable と同じです。したがって、コンパイラは生成された .idl ファイルを使って aggregatable 属性を渡します。
この属性を使用する場合は、同じ要素に対して coclass、progid、または vi_progid の各属性 (あるいは、これらの 1 つを表す別の属性) も適用する必要があります。1 つの属性を使用すると、ほかの 2 つは自動的に適用されます。たとえば、progid を適用すると、vi_progid および coclass も適用されます。
ATL プロジェクト
この属性が ATL を使用するプロジェクト内で使用される場合、属性の動作は異なります。前に説明した動作のほかに、次の表のマクロの 1 つを対象のクラスに追加します。
パラメータの値 |
挿入されるマクロ |
---|---|
Never |
|
Allowed |
|
Always |
使用例
// 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 |
複数回の適用 |
不可 |
必要な属性 |
coclass、progid、vi_progid の中から 1 つ以上 |
無効な属性 |
なし |
属性コンテキストの詳細については、「属性コンテキスト」を参照してください。