Compartilhar via


com_interface_entry (C++)

Adiciona uma entrada de interface ao mapa COM da classe de destino.

Sintaxe

[ com_interface_entry(
  com_interface_entry) ]

Parâmetros

com_interface_entry
Uma cadeia de caracteres contendo o texto real da entrada. Para obter uma lista de valores possíveis, consulte Macros COM_INTERFACE_ENTRY.

Comentários

O atributo C++ com_interface_entry insere o conteúdo integral de uma cadeia de caracteres no mapa de interface COM do objeto de destino. Se o atributo for aplicado uma vez ao objeto de destino, a entrada será inserida no início do mapa de interface existente. Se o atributo for aplicado repetidamente ao mesmo objeto de destino, as entradas serão inseridas no início do mapa de interface na ordem em que forem recebidas.

Esse atributo requer que o atributo coclass, progid ou vi_progid (ou outro atributo que implique um desses) também seja aplicado ao mesmo elemento. Se qualquer atributo único for usado, os outros dois serão aplicados automaticamente. Por exemplo, se progid for aplicado, vi_progid e coclass também serão aplicados.

Como o primeiro uso de com_interface_entry faz com que a nova interface seja inserida no início do mapa de interface, ela deverá ser um dos seguintes tipos COM_INTERFACE_ENTRY:

  • COM_INTERFACE_ENTRY

  • COM_INTERFACE_ENTRY_IID

  • COM_INTERFACE_ENTRY2

  • COM_INTERFACE_ENTRY2_IID

Usos adicionais do atributo com_interface_entry podem usar todos os tipos COM_INTERFACE_ENTRY com suporte.

Essa restrição é necessária porque o ATL usa a primeira entrada no mapa de interface como a identidade IUnknown, portanto, a entrada deverá ser uma interface válida. Por exemplo, o exemplo de código a seguir é inválido porque a primeira entrada no mapa de interface não especifica uma interface COM real.

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

Exemplo

O código a seguir adiciona duas entradas ao mapa de interface COM existente de CMyBaseClass. A primeira é uma interface padrão e a segunda oculta a interface 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
{
};

O mapa de objeto COM resultante para CMyBaseClass é o seguinte:

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

Requisitos

Contexto do atributo Valor
Aplicável ao class, struct
Repetível Sim
Atributos obrigatórios Um ou mais dos seguintes: coclass, progid ou vi_progid.
Atributos inválidos Nenhum

Para obter mais informações sobre os contextos de atributo, confira Contextos de atributo.

Confira também

Atributos de COM
Atributos de classe
Atributos Typedef, Enum, Union e Struct