次の方法で共有


aggregates

オブジェクトが CLSID で指定されたオブジェクトを集約することを示します。

[ aggregates(
   clsid,
   variable_name
) ]

パラメーター

  • clsid
    集約できるオブジェクトの CLSID。

  • variable_name
    挿入する変数の名前。 この変数には、集約されるオブジェクトの IUnknown が含まれます。

解説

C++ 属性 aggregates は、オブジェクトに適用されるときに、集約されるオブジェクト (clsid で指定されます) の外部ラッパーを実装します。

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

ATL プロジェクト

この属性が ATL を使用するプロジェクト内で使用される場合、属性の動作は異なります。 最初に、次のエントリが適用先オブジェクトの COM マップに追加されます。

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(_m_spAttrXXX, clsid)

次に、DECLARE_GET_CONTROLLING_UNKNOWN マクロも追加されます。

使用例

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

// requires 'aggregatable.dll'
// see aggregatable attribute to create 'aggregatable.dll'
class DECLSPEC_UUID("1a8369cc-1c91-42c4-befa-5a5d8c9d2529") CMyClass;

[module (name="MYObject")];
[object, uuid("ab006d85-e754-47c5-9ef4-2744ff32a20c")]
__interface IObject
{
};

[ coclass, aggregates(__uuidof(CMyClass)), 
  uuid("91cb2c06-8931-432a-baac-206e55c4edfb")]
struct CObject : IObject
{
   int i;
};

必要条件

属性コンテキスト

対象

class、struct

複数回の適用

必要

必要な属性

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

無効な属性

[なし]

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

参照

参照

Aggregation

Aggregatable

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND

その他の技術情報

COM 属性

クラス属性

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

ATL サンプル