Udostępnij za pośrednictwem


com_interface_entry (C++)

Dodaje wpis interfejs do mapy COM klasy docelowej.

[ com_interface_entry(  
   com_interface_entry 
 ) ]

Parametry

  • com_interface_entry
    Ciąg zawierający tekst rzeczywistego wejścia.Aby uzyskać listę możliwych wartości, zobacz Makra COM_INTERFACE_ENTRY.

Uwagi

com_interface_entry Atrybut C++ Wstawia pełną zawartość ciąg znaków do mapa interfejsu COM obiekt docelowy.Jeśli atrybut jest raz zastosowany do obiektu docelowego, zapis jest wstawiany do początku istniejącej mapy interfejsu.Jeśli atrybut jest wielokrotnie stosowane do tego samego obiektu docelowego, dodaje się pozycje na początku mapę interfejsu w kolejności ich odebrania.

Atrybut ten wymaga, aby coclass, progid, lub vi_progid atrybutu (lub inny atrybut, który oznacza jeden z tych) również być stosowane do tego samego elementu.Każdy pojedynczy atrybut jest używany, pozostałe dwie 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, że nowy interfejs ma zostać wstawiony na początku mapę interfejsu musi być jedną z następujących typów COM_INTERFACE_ENTRY:

  • COM_INTERFACE_ENTRY

  • COM_INTERFACE_ENTRY_IID

  • COM_INTERFACE_ENTRY2

  • COM_INTERFACE_ENTRY2_IID

Zastosowania dodatkowych com_interface_entry atrybut można używać wszystkich obsługiwanych typów COM_INTERFACE_ENTRY.

To ograniczenie jest konieczne, ponieważ ATL używa pierwszego wpisu mapy interfejsu jako tożsamość IUnknown; w związku z tym wpis musi być prawidłowy interfejs.Na przykład następujący przykładowy kod źródłowy jest nieprawidłowa, ponieważ pierwszy wpis w tablicy interfejsu nie określa rzeczywiste 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 z CMyBaseClass.Pierwszy to standardowy interfejs i ukrywa drugi IDebugTest interfejsu.

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

Wynikowy mapę obiektu COM dla CMyBaseClass jest w następujący sposób:

    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

Atrybutu kontekstu

Stosuje się do

Klasa,struct

Powtarzalne

Tak

Wymagane atrybuty

Jeden lub więcej z następujących czynności: coclass, progid, lub vi_progid.

Nieprawidłowe atrybuty

Brak

Aby uzyskać więcej informacji na temat kontekstów atrybutu, zobacz Kontekstów atrybutu.

Zobacz też

Inne zasoby

Atrybuty COM

Atrybuty klasy

Atrybuty Typedef, Enum, Union oraz Struct

Attributes Samples