Поделиться через


com_interface_entry (C++)

Добавляет запись интерфейса в сопоставление модели COM класса целевого объекта.

[ com_interface_entry(  
   com_interface_entry 
 ) ]

Параметры

  • com_interface_entry
    Строка, содержащая фактический текст записи. Список возможных значений см. макросы COM_INTERFACE_ENTRY.

Заметки

com_interface_entry Атрибут C++ вставляет unabridged содержимое строки символов в сопоставления com-интерфейса целевого объекта. Если атрибут применяется только к целевому объекту, то запись вставляется в начало существующего сопоставления интерфейса. Если атрибут применяется повторно к тому же целевому объекту, то записи вставляются в начале сопоставления интерфейса в порядке их получения.

Этот атрибут необходим CoClass" идентификатор progidили vi_progid атрибут (или другой атрибут, подразумевается одно из них) также были применены к одному элементу. Если отдельный атрибут используется, то остальные 2 автоматически применены. Например, если идентификатор 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
   {
   };

Пример

В следующем примере кода добавляется 2 записей сопоставления com-интерфейса к существующему CMyBaseClass. Первый стандартный интерфейс, а второе скрывает 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
{
};

Результирующее сопоставление для com-объектов CMyBaseClass следующим образом:

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

Требования

Контекст атрибута

Применение

класс" struct

Repeatable

Да

Обязательные атрибуты

Одно или несколько из следующих значений: CoClass" идентификатор progidили vi_progid.

Недопустимые атрибуты

None

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

См. также

Другие ресурсы

Атрибуты COM

Атрибуты классов

Атрибуты Typedef, Enum, Union и Struct

Attributes Samples