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 , progid lub vi_progid . |
Nieprawidłowe atrybuty | Brak |
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