Udostępnij za pośrednictwem


com_interface_entry (C++)

Dodaje wpis interfejsu do mapy COM klasy docelowej.

Składnia

[ com_interface_entry(
  com_interface_entry) ]

Parametry

com_interface_entry
Ciąg zawierający rzeczywisty tekst wpisu. Aby uzyskać listę możliwych wartości, zobacz COM_INTERFACE_ENTRY Makra.

Uwagi

Atrybut com_interface_entry C++ wstawia nieukończoną zawartość ciągu znaków do mapy interfejsu COM obiektu docelowego. Jeśli atrybut jest stosowany raz do obiektu docelowego, wpis zostanie wstawiony na początku istniejącej mapy interfejsu. Jeśli atrybut jest wielokrotnie stosowany do tego samego obiektu docelowego, wpisy są wstawiane na początku mapy interfejsu w kolejności ich odebrania.

Ten atrybut wymaga również zastosowania coclass, progid lub vi_progid atrybutu (lub innego atrybutu, który implikuje jeden z tych) również do tego samego elementu. Jeśli jest używany jakikolwiek pojedynczy atrybut, pozostałe dwa są stosowane automatycznie. Na przykład, jeśli progid jest stosowany, vi_progid i coclass są również stosowane.

Ponieważ pierwsze użycie com_interface_entry powoduje wstawienie nowego interfejsu na początku mapy interfejsu, musi być jednym z następujących typów COM_INTERFACE_ENTRY:

  • COM_INTERFACE_ENTRY

  • COM_INTERFACE_ENTRY_IID

  • COM_INTERFACE_ENTRY2

  • COM_INTERFACE_ENTRY2_IID

Dodatkowe użycie atrybutu com_interface_entry może używać wszystkich obsługiwanych typów COM_INTERFACE_ENTRY.

To ograniczenie jest konieczne, ponieważ usługa ATL używa pierwszego wpisu na mapie interfejsu jako tożsamości IUnknown; dlatego wpis musi być prawidłowym interfejsem. Na przykład poniższy przykład kodu jest nieprawidłowy, ponieważ pierwszy wpis na mapie interfejsu nie określa rzeczywistego interfejsu COM.

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

Przykład

Poniższy kod dodaje dwa wpisy do istniejącej mapy interfejsu COM .CMyBaseClass Pierwszy to standardowy interfejs, a drugi ukrywa IDebugTest interfejs.

// 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
{
};

Wynikowa mapa CMyBaseClass obiektów MODELU COM jest następująca:

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

Wymagania

Kontekst atrybutu Wartość
Dotyczy class, struct
Powtarzalne Tak
Wymagane atrybuty Co najmniej jeden z następujących elementów: coclass, progidlub vi_progid.
Nieprawidłowe atrybuty None

Aby uzyskać więcej informacji na temat kontekstów atrybutów, zobacz Konteksty atrybutów.

Zobacz też

Atrybuty COM
Atrybuty klasy
Atrybuty Typedef, Enum, Union oraz Struct