CComObject-Klasse

Diese Klasse implementiert IUnknown für ein nicht aggregiertes Objekt.

Syntax

template<class Base>
class CComObject : public Base

Parameter

Bemessungsgrundlage
Ihre Von CComObjectRoot oder CComObjectRootEx abgeleitete Klasse sowie alle anderen Schnittstellen, die Sie für das Objekt unterstützen möchten.

Member

Öffentliche Konstruktoren

Name Beschreibung
CComObject::CComObject Der Konstruktor.
CComObject::~CComObject Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CComObject::AddRef Erhöht die Verweisanzahl für das Objekt.
CComObject::CreateInstance (Statisch) Erstellt ein neues CComObject Objekt.
CComObject::QueryInterface Ruft einen Zeiger auf die angeforderte Schnittstelle ab.
CComObject::Release Erhöht die Verweisanzahl für das Objekt.

Hinweise

CComObjectimplementiert IUnknown für ein nicht aggregiertes Objekt. Aufrufe an QueryInterfaceAddRef, und Release werden an CComObjectRootExdelegiert.

Weitere Informationen zur Verwendung CComObjectfinden Sie im Artikel Grundlagen von ATL COM-Objekten.

Vererbungshierarchie

Base

CComObject

Anforderungen

Kopfzeile: atlcom.h

CComObject::AddRef

Erhöht die Verweisanzahl für das Objekt.

STDMETHOD_(ULONG, AddRef)();

Rückgabewert

Diese Funktion gibt die neue inkrementierte Verweisanzahl für das Objekt zurück. Dieser Wert kann für Diagnose oder Tests nützlich sein.

CComObject::CComObject

Der Konstruktor erhöht die Anzahl der Modulsperren.

CComObject(void* = NULL);

Parameter

Leere*
[in] Dieser unbenannte Parameter wird nicht verwendet. Es ist für Symmetrie mit anderen CComXXXObjectXXX Konstruktoren vorhanden.

Hinweise

Der Destruktor erhöht ihn.

Wenn ein abgeleitetes CComObjectObjekt erfolgreich mithilfe des new Operators erstellt wird, ist die anfängliche Referenzanzahl 0. Um die Verweisanzahl auf den richtigen Wert (1) festzulegen, rufen Sie die AddRef-Funktion auf.

CComObject::~CComObject

Der Destruktor.

CComObject();

Hinweise

Gibt alle zugeordneten Ressourcen frei, ruft FinalRelease auf und erhöht die Modulsperranzahl.

CComObject::CreateInstance

Mit dieser statischen Funktion können Sie ein neues CComObject-ObjektBase>< erstellen, ohne den Aufwand von CoCreateInstance.

static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);

Parameter

Pp
[out] Ein Zeiger auf einen CComObject-Zeiger><Base. Wenn CreateInstance dies nicht erfolgreich ist, wird pp auf NULL festgelegt.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Das zurückgegebene Objekt weist eine Bezugsanzahl von Null auf. Rufen Sie also sofort auf AddRef , um Release den Verweis auf den Objektzeiger freizugeben, wenn Sie fertig sind.

Wenn Sie keinen direkten Zugriff auf das Objekt benötigen, aber dennoch ein neues Objekt erstellen möchten, ohne den Aufwand CoCreateInstancezu haben, verwenden Sie stattdessen CComCoClass::CreateInstance .

Beispiel

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

Ruft einen Zeiger auf die angeforderte Schnittstelle ab.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);

Parameter

Iid
[in] Der Bezeichner der angeforderten Schnittstelle.

ppvObject
[out] Ein Zeiger auf den Schnittstellenzeiger, der durch iid identifiziert wird. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird ppvObject auf NULL festgelegt.

Pp
[out] Ein Zeiger auf den Schnittstellenzeiger, der vom Typ Qidentifiziert wird. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird pp auf NULL festgelegt.

Rückgabewert

Ein HRESULT-Standardwert.

CComObject::Release

Erhöht die Verweisanzahl für das Objekt.

STDMETHOD_(ULONG, Release)();

Rückgabewert

Diese Funktion gibt die neue dekrementierte Verweisanzahl für das Objekt zurück. In Debugbuilds kann der Rückgabewert für Diagnose oder Tests nützlich sein. Gibt in Nicht-Debug-Builds Release immer "0" zurück.

Siehe auch

CComAggObject-Klasse
CComPolyObject-Klasse
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Klassenübersicht