次の方法で共有


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

常時

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

複数回の適用

不要

必要な属性

以下の順で 1 つ以上の文字が続くコクラスprogid、または vi_progid

無効な属性

[なし]

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

参照

参照

Aggregation

その他の技術情報

IDL 属性

クラス属性

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

ATL サンプル