次の方法で共有


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 属性を渡します。

この属性を使用する場合は、同じ要素に対して coclassprogid、または vi_progid の各属性 (あるいは、これらの 1 つを表す別の属性) も適用する必要があります。1 つの属性を使用すると、ほかの 2 つは自動的に適用されます。たとえば、progid を適用すると、vi_progid および coclass も適用されます。

ATL プロジェクト

この属性が ATL を使用するプロジェクト内で使用される場合、属性の動作は異なります。前に説明した動作のほかに、次の表のマクロの 1 つを対象のクラスに追加します。

パラメータの値

挿入されるマクロ

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

複数回の適用

不可

必要な属性

coclassprogidvi_progid の中から 1 つ以上

無効な属性

なし

属性コンテキストの詳細については、「属性コンテキスト」を参照してください。

参照

概念

IDL 属性

クラス属性

Typedef、Enum、Union、および Struct 型の属性

Aggregation

ATL サンプル