次の方法で共有


com_interface_entry (C++)

ターゲットクラスの COM マップにインターフェイス エントリを追加します。

構文

[ com_interface_entry(
  com_interface_entry) ]

パラメーター

com_interface_entry
エントリの実際のテキストを格納している文字列。 使用可能な値の一覧については、「COM_INTERFACE_ENTRY マクロ」を参照してください。

解説

com_interface_entry C++ 属性は、ターゲット オブジェクトの COM インターフェイス マップに文字列の完全な内容を挿入します。 属性がターゲット オブジェクトに 1 回適用された場合、エントリは既存のインターフェイス マップの先頭に挿入されます。 属性が同じターゲット オブジェクトに繰り返し適用された場合、エントリは、受信された順にインターフェイス マップの先頭に挿入されます。

この属性を使用するには、 coclassprogid、または vi_progid 属性 (または、これらのいずれかを意味する別の属性) も同じ要素に適用する必要があります。 いずれか 1 つの属性を使用すると、他の 2 つも自動的に適用されます。 たとえば、progid が適用されている場合、vi_progidcoclass も適用されます。

com_interface_entry の初回の使用では、インターフェイス マップの先頭に新しいインターフェイスが挿入されるため、次のいずれかの COM_INTERFACE_ENTRY 型を使用する必要があります。

  • COM_INTERFACE_ENTRY

  • COM_INTERFACE_ENTRY_IID

  • COM_INTERFACE_ENTRY2

  • COM_INTERFACE_ENTRY2_IID

com_interface_entry 属性のその後の使用では、サポートされているすべての COM_INTERFACE_ENTRY 型を使用できます。

この制限が必要なのは、ATL では、インターフェイス マップの最初のエントリを ID IUnknown として使用するためです。したがって、エントリは有効なインターフェイスである必要があります。 たとえば、次のコード サンプルは、インターフェイス マップの最初のエントリで実際の COM インターフェイスが指定されていないため、無効です。

[ coclass, com_interface_entry =
    "COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)"
]
   class CMyClass
   {
   };

次のコードでは、CMyBaseClass の既存の COM インターフェイス マップに 2 つのエントリが追加されます。 1 つめは標準のインターフェイスで、2 つめは IDebugTest インターフェイスを非表示にします。

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

[module (name ="ldld")];

[ object,
  uuid("7dbebed3-d636-4917-af62-c767a720a5b9")]
__interface IDebugTest{};

[ object,
  uuid("2875ceac-f94b-4087-8e13-d13dc167fcfc")]
__interface IMyClass{};

[ coclass,
  com_interface_entry ("COM_INTERFACE_ENTRY (IMyClass)"),
  com_interface_entry ("COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)"),
  uuid("b85f8626-e76e-4775-b6a0-4826a9e94af2")
]

class CMyClass: public IMyClass, public IDebugTest
{
};

CMyBaseClass の結果の COM オブジェクト マップは次のようになります。

BEGIN_COM_MAP(CMyClass)
    COM_INTERFACE_ENTRY (IMyClass)
    COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)
    COM_INTERFACE_ENTRY(IMyClass)
    COM_INTERFACE_ENTRY2(IDispatch, IMyClass)
    COM_INTERFACE_ENTRY(IDebugTest)
    COM_INTERFACE_ENTRY(IProvideClassInfo)
END_COM_MAP()

要件

属性コンテキスト
適用対象 $
反復可能 はい
必要な属性 coclassprogidvi_progid のいずれか。
無効な属性 なし

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

関連項目

COM 属性
クラス属性
Typedef、Enum、Union、および Struct 型の属性