Klasa CComTearOffObject
Ta klasa implementuje interfejs odrywania.
Składnia
template<class Base>
class CComTearOffObject : public Base
Parametry
Baza
Klasa łzawiąca, pochodząca z CComTearOffObjectBase
i interfejsy, które mają obsługiwać obiekt odrywania.
Usługa ATL implementuje interfejsy odrywania w dwóch fazach — CComTearOffObjectBase
metody obsługują liczbę odwołań i QueryInterface
, a jednocześnie CComTearOffObject
implementuje element IUnknown.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CComTearOffObject::CComTearOffObject | Konstruktor. |
CComTearOffObject::~CComTearOffObject | Destruktora. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CComTearOffObject::AddRef | Zwiększa liczbę odwołań dla CComTearOffObject obiektu. |
CComTearOffObject::QueryInterface | Zwraca wskaźnik do żądanego interfejsu w klasie odrywanej lub klasie właściciela. |
CComTearOffObject::Release | Dekrementuje liczbę odwołań dla CComTearOffObject obiektu i niszczy ją. |
Metody CComTearOffObjectBase
Function | opis |
---|---|
CComTearOffObjectBase | Konstruktor. |
Elementy członkowskie danych CComTearOffObjectBase
Element członkowski danych | opis |
---|---|
m_pOwner | Wskaźnik do CComObject klasy właściciela. |
Uwagi
CComTearOffObject
Implementuje interfejs odrywania jako oddzielny obiekt, który jest tworzone wystąpienie tylko wtedy, gdy ten interfejs jest odpytywane. Odręcz jest usuwany, gdy jego liczba odwołań staje się równa zero. Zazwyczaj tworzy się interfejs odrywania dla interfejsu, który jest rzadko używany, ponieważ przy użyciu odręczne zapisywanie wskaźnika w formie tabeli wirtualnej we wszystkich wystąpieniach głównego obiektu.
Należy utworzyć klasę wdrażającą odrętę z CComTearOffObjectBase
i z niezależnie od interfejsów, które mają obsługiwać obiekt odrywania. CComTearOffObjectBase
element jest templatized w klasie właściciela i modelu wątku. Klasa właściciela jest klasą obiektu, dla którego implementowane jest odręcie. Jeśli nie określisz modelu wątku, zostanie użyty domyślny model wątku.
Należy utworzyć mapę MODELU COM dla klasy łzawiącego. Gdy ATL tworzy wystąpienie łzawiącego, zostanie utworzony CComTearOffObject<CYourTearOffClass>
lub CComCachedTearOffObject<CYourTearOffClass>
.
Na przykład w przykładzie CBeeper2
BEEPER klasa jest klasą odrywaną, a CBeeper
klasa jest klasą właściciela:
class CBeeper2 :
public ISupportErrorInfo,
public CComTearOffObjectBase<CBeeper>
{
public:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
return (InlineIsEqualGUID(IID_IBeeper, riid)) ? S_OK : S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
class ATL_NO_VTABLE CBeeper :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBeeper, &CLSID_Beeper>,
public IDispatchImpl<IBeeper, &IID_IBeeper, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBeeper()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_BEEPER)
DECLARE_NOT_AGGREGATABLE(CBeeper)
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
};
Hierarchia dziedziczenia
Base
CComTearOffObject
Wymagania
Nagłówek: atlcom.h
CComTearOffObject::AddRef
Zwiększa liczbę CComTearOffObject
odwołań obiektu o jeden.
STDMETHOD_(ULONG, AddRef)();
Wartość zwracana
Wartość, która może być przydatna do diagnostyki i testowania.
CComTearOffObject::CComTearOffObject
Konstruktor.
CComTearOffObject(void* pv);
Parametry
Pv
[in] Wskaźnik, który zostanie przekonwertowany na wskaźnik do CComObject<Owner>
obiektu.
Uwagi
Zwiększa liczbę odwołań właściciela o jeden.
CComTearOffObject::~CComTearOffObject
Destruktora.
~CComTearOffObject();
Uwagi
Zwalnia wszystkie przydzielone zasoby, wywołuje funkcję FinalRelease i usuwa liczbę blokad modułu.
CComTearOffObject::CComTearOffObjectBase
Konstruktor.
CComTearOffObjectBase();
Uwagi
Inicjuje element członkowski m_pOwner wartość NULL.
CComTearOffObject::m_pOwner
Wskaźnik do obiektu CComObject pochodzącego z właściwości Owner.
CComObject<Owner>* m_pOwner;
Parametry
Właściciel
[in] Klasa, dla której wdrażana jest odręcz.
Uwagi
Wskaźnik jest inicjowany do wartości NULL podczas budowy.
CComTearOffObject::QueryInterface
Pobiera wskaźnik do żądanego interfejsu.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parametry
identyfikator iid
[in] Identyfikator IID żądanego interfejsu.
ppvObject
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez identyfikator lub wartość NULL, jeśli interfejs nie zostanie znaleziony.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Najpierw wykonuje zapytania dotyczące interfejsów w klasie odrywania. Jeśli interfejs nie istnieje, wysyła zapytania dotyczące interfejsu w obiekcie właściciela. Jeśli żądany interfejs to IUnknown
, zwraca IUnknown
właściciela.
CComTearOffObject::Release
Dekrementuje liczbę odwołań o jedną, a jeśli liczba odwołań wynosi zero, usuwa CComTearOffObject
wartość .
STDMETHOD_ULONG Release();
Wartość zwracana
W kompilacjach innych niż debugowanie zawsze zwraca zero. W kompilacjach debugowania zwraca wartość, która może być przydatna do diagnostyki lub testowania.