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()

Требования

Контекст атрибута Значение
Относится к class, struct
Повторяемый Да
Обязательные атрибуты Одно или несколько из следующих элементов: coclass, progidили vi_progid.
Недопустимые атрибуты None

Дополнительные сведения о контекстах атрибутов см. в разделе Контексты атрибутов.

См. также

Атрибуты COM
Атрибуты классов
Атрибуты Typedef, Enum, Union и Struct