com_interface_entry (C++)
将接口条目添加到目标类的 COM 映射中。
语法
[ com_interface_entry(
com_interface_entry) ]
参数
com_interface_entry
包含条目实际文本的字符串。 有关可能值的列表,请参阅 COM_INTERFACE_ENTRY 宏。
注解
com_interface_entry C++ 属性将字符串的未删节内容插入目标对象的 COM 接口映射中。 如果属性应用于目标对象一次,则条目会插入现有接口映射开头。 如果属性重复应用于同一目标对象,则条目将按接收顺序插入接口映射开头。
此属性要求 coclass、 progid或 vi_progid 属性(或隐含这些属性之一的其他属性)也应用于同一个元素。 如果使用任何单个属性,则会自动应用另外两个属性。 例如,如果应用 progid
,则也会应用 vi_progid
和 coclass
。
由于 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()
要求
特性上下文 | 值 |
---|---|
适用于 | %> |
可重复 | 是 |
必需的特性 | 下面的一项或多项:coclass 、progid 或 vi_progid 。 |
无效的特性 | 无 |
有关特性上下文的详细信息,请参见 特性上下文。