Udostępnij za pośrednictwem


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, AddRefi 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.

CComObjectJeś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