com_interface_entry (C++)

将接口条目添加到目标类的 COM 映射中。

语法

[ com_interface_entry(
  com_interface_entry) ]

参数

com_interface_entry
包含条目实际文本的字符串。 有关可能值的列表,请参阅 COM_INTERFACE_ENTRY 宏

注解

com_interface_entry C++ 属性将字符串的未删节内容插入目标对象的 COM 接口映射中。 如果属性应用于目标对象一次,则条目会插入现有接口映射开头。 如果属性重复应用于同一目标对象,则条目将按接收顺序插入接口映射开头。

此属性要求 coclassprogidvi_progid 属性(或隐含这些属性之一的其他属性)也应用于同一个元素。 如果使用任何单个属性,则会自动应用另外两个属性。 例如,如果应用 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 使用接口映射中的第一个条目作为标识 IUnknown;因此,该条目必须为有效接口。 例如,以下代码示例无效,因为接口映射中的第一个条目未指定实际 COM 接口。

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

示例

以下代码将两个条目添加到 CMyBaseClass 的现有 COM 接口映射中。 第一个是标准接口,第二个则隐藏 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()

要求

特性上下文
适用于 classstruct
可重复
必需的特性 下面的一项或多项:coclassprogidvi_progid
无效的特性

有关特性上下文的详细信息,请参见 特性上下文

另请参阅

COM 特性
类特性
Typedef、Enum、Union 和 Struct 特性