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
CComObject
implementiert IUnknown für ein nicht aggregiertes Objekt. Aufrufe an QueryInterface
AddRef
, und Release
werden an CComObjectRootEx
delegiert.
Weitere Informationen zur Verwendung CComObject
finden 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 Diagnosen 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 CComObject
Objekt 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 CoCreateInstance
zu 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 Q
identifiziert 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 Diagnosen 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