Klasa CComObject
Ta klasa implementuje IUnknown
obiekt nieagregowany.
Składnia
template<class Base>
class CComObject : public Base
Parametry
Baza
Klasa, pochodząca z CComObjectRoot lub CComObjectRootEx, a także z innych interfejsów, które mają być obsługiwane w obiekcie.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CComObject::CComObject | Konstruktor. |
CComObject::~CComObject | Destruktora. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CComObject::AddRef | Zwiększa liczbę odwołań względem obiektu. |
CComObject::CreateInstance | (Statyczne) Tworzy nowy CComObject obiekt. |
CComObject::QueryInterface | Pobiera wskaźnik do żądanego interfejsu. |
CComObject::Release | Dekrementuje liczbę odwołań dla obiektu. |
Uwagi
CComObject
implementuje element IUnknown dla obiektu nieagregowanego. Jednak wywołania metody QueryInterface
, AddRef
i Release
są delegowane do .CComObjectRootEx
Aby uzyskać więcej informacji na temat korzystania z programu CComObject
, zobacz artykuł Podstawy obiektów COM ATL.
Hierarchia dziedziczenia
Base
CComObject
Wymagania
Nagłówek: atlcom.h
CComObject::AddRef
Zwiększa liczbę odwołań względem obiektu.
STDMETHOD_(ULONG, AddRef)();
Wartość zwracana
Ta funkcja zwraca nową liczbę przyrostowych odwołań dla obiektu. Ta wartość może być przydatna do diagnostyki lub testowania.
CComObject::CComObject
Konstruktor zwiększa liczbę blokad modułu.
CComObject(void* = NULL);
Parametry
nieważny*
[in] Ten nienazwany parametr nie jest używany. Istnieje on dla symetrii z innymi CComXXXObjectXXX
konstruktorami.
Uwagi
Destruktor dekrementuje go.
CComObject
Jeśli obiekt pochodny został pomyślnie skonstruowany przy użyciu new
operatora, początkowa liczba odwołań wynosi 0. Aby ustawić liczbę odwołań na odpowiednią wartość (1), wykonaj wywołanie funkcji AddRef .
CComObject::~CComObject
Destruktora.
CComObject();
Uwagi
Zwalnia wszystkie przydzielone zasoby, wywołuje funkcję FinalRelease i usuwa liczbę blokad modułu.
CComObject::CreateInstance
Ta funkcja statyczna umożliwia utworzenie nowego obiektu CComObjectBase
>< bez obciążenia związanego z funkcją CoCreateInstance.
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
Parametry
Pp
[out] Wskaźnik do wskaźnika CComObject><Base
. Jeśli CreateInstance
nie powiedzie się, wartość pp jest ustawiona na wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Zwrócony obiekt ma liczbę odwołań zero, więc wywołaj AddRef
natychmiast, a następnie użyj polecenia Release
, aby zwolnić odwołanie w wskaźniku obiektu po zakończeniu.
Jeśli nie potrzebujesz bezpośredniego dostępu do obiektu, ale nadal chcesz utworzyć nowy obiekt bez narzutu CoCreateInstance
, zamiast tego użyj klasy CComCoClass::CreateInstance .
Przykład
class ATL_NO_VTABLE CMyCircle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCircle, &CLSID_MyCircle>,
public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CMyCircle()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)
DECLARE_NOT_AGGREGATABLE(CMyCircle)
BEGIN_COM_MAP(CMyCircle)
COM_INTERFACE_ENTRY(IMyCircle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_XCenter)(double* pVal);
};
// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));
// Increment reference count immediately
pCircle->AddRef();
// Access method of COM object
hRes = pCircle->get_XCenter(&x);
// Decrement reference count when done
pCircle->Release();
pCircle = NULL;
CComObject::QueryInterface
Pobiera wskaźnik do żądanego interfejsu.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);
Parametry
identyfikator iid
[in] Identyfikator żądanego interfejsu.
ppvObject
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez identyfikator iid. Jeśli obiekt nie obsługuje tego interfejsu, obiekt ppvObject ma ustawioną wartość NULL.
Pp
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez typ Q
. Jeśli obiekt nie obsługuje tego interfejsu, parametr pp jest ustawiony na wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
CComObject::Release
Dekrementuje liczbę odwołań dla obiektu.
STDMETHOD_(ULONG, Release)();
Wartość zwracana
Ta funkcja zwraca nową, zdekrementowaną liczbę odwołań dla obiektu. W kompilacjach debugowania wartość zwracana może być przydatna do diagnostyki lub testowania. W kompilacjach innych niż debugowanie Release
zawsze zwraca wartość 0.
Zobacz też
Klasa CComAggObject
Klasa CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Omówienie klasy