ComPtr-Klasse

Erstellt einen intelligenten Zeigertyp , der die Schnittstelle darstellt, die vom Vorlagenparameter angegeben wird. ComPtr verwaltet automatisch einen Verweiszähler für den zugrunde liegenden Schnittstellenzeiger und gibt die Schnittstelle frei, wenn der Verweiszähler auf null geht.

Syntax

template <typename T>
class ComPtr;

template<class U>
friend class ComPtr;

Parameter

T
Die Schnittstelle, die dies ComPtr darstellt.

U
Ein Kurs, zu dem der Aktuelle ComPtr ein Freund ist. (Die Vorlage, die diesen Parameter verwendet, ist geschützt.)

Hinweise

ComPtr<> deklariert einen Typ, der den zugrunde liegenden Schnittstellenzeiger darstellt. Hiermit ComPtr<> deklarieren Sie eine Variable, und verwenden Sie dann den Pfeilmemembzugriffsoperator (->), um auf eine Schnittstellenmememmfunktion zuzugreifen.

Weitere Informationen zu intelligenten Zeigern finden Sie im Unterabschnitt "COM Smart Pointers" des COM Coding Practices-Artikels .

Member

Öffentliche Typedefs

Name Beschreibung
InterfaceType Ein Synonym für den Typ, der durch den T -Vorlagenparameter angegeben ist.

Öffentliche Konstruktoren

Name Beschreibung
ComPtr::ComPtr Initialisiert eine neue Instanz der ComPtr-Klasse. Überladungen stellen Standard-, Kopier-, Verschiebe- und Konvertierungskonstruktoren bereit.
ComPtr::~ComPtr Deinitialisiert eine Instanz von ComPtr.

Öffentliche Methoden

Name Beschreibung
ComPtr::As Gibt ein ComPtr Objekt zurück, das die vom angegebenen Vorlagenparameter identifizierte Schnittstelle darstellt.
ComPtr::AsIID Gibt ein ComPtr Objekt zurück, das die durch die angegebene Schnittstellen-ID identifizierte Schnittstelle darstellt.
ComPtr::AsWeak Ruft einen schwachen Verweis (WeakReference) auf das aktuelle Objekt ab.
ComPtr::Attach Ordnet dies ComPtr dem vom aktuellen Vorlagentypparameter angegebenen Schnittstellentyp zu.
ComPtr::CopyTo Kopiert die aktuelle oder angegebene Schnittstelle, die dieser ComPtr Schnittstelle zugeordnet ist, an den angegebenen Ausgabezeiger.
ComPtr::Detach Hindert dies ComPtr von der Schnittstelle, die sie darstellt.
ComPtr::Get Ruft einen Zeiger auf die Schnittstelle ab, die dieser ComPtrSchnittstelle zugeordnet ist.
ComPtr::GetAddressOf Ruft die Adresse des ptr_ Datenelements ab, das einen Zeiger auf die schnittstelle enthält, die durch diese ComPtrdargestellt wird.
ComPtr::ReleaseAndGetAddressOf Gibt die dieser ComPtr Schnittstelle zugeordnete Schnittstelle frei und ruft dann die Adresse des ptr_ Datenmemers ab, das einen Zeiger auf die freigegebene Schnittstelle enthält.
ComPtr::Reset Gibt die dieser ComPtr Schnittstelle zugeordnete Schnittstelle frei und gibt die neue Referenzanzahl zurück.
ComPtr::Swap Austauscht die schnittstelle, die vom aktuellen ComPtr verwaltet wird, mit der Schnittstelle, die vom angegebenen verwaltet ComPtrwird.

Geschützte Methoden

Name Beschreibung
ComPtr::InternalAddRef Erhöht die Referenzanzahl der dieser ComPtrSchnittstelle zugeordneten Schnittstelle.
ComPtr::InternalRelease Führt einen COM Release-Vorgang auf der schnittstelle aus, die diesem ComPtrzugeordnet ist.

Öffentliche Operatoren

Name Beschreibung
ComPtr::operator& Ruft die Adresse des aktuellen ComPtr.
ComPtr::operator-> Ruft einen Zeiger auf den Typ ab, der durch den aktuellen Vorlagenparameter angegeben ist.
ComPtr::operator= Weist dem aktuellen ComPtrWert einen Wert zu.
ComPtr::operator== Gibt an, ob zwei ComPtr-Objekte gleich sind.
ComPtr::operator!= Gibt an, ob zwei ComPtr Objekte nicht gleich sind.
ComPtr::operator Microsoft::WRL::Details::BoolType Gibt an, ob die ComPtr Objektlebensdauer einer Schnittstelle verwaltet wird.

Geschützte Datenmember

Name Beschreibung
ComPtr::ptr_ Enthält einen Zeiger auf die Schnittstelle, die zugeordnet ist und von dieser ComPtrverwaltet wird.

Vererbungshierarchie

ComPtr

Anforderungen

Headerclient.h:

Namespace:Microsoft::WRL

ComPtr::~ComPtr

Deinitialisiert eine Instanz von ComPtr.

WRL_NOTHROW ~ComPtr();

ComPtr::As

Gibt ein ComPtr Objekt zurück, das die vom angegebenen Vorlagenparameter identifizierte Schnittstelle darstellt.

template<typename U>
HRESULT As(
   _Out_ ComPtr<U>* p
) const;

template<typename U>
HRESULT As(
   _Out_ Details::ComPtrRef<ComPtr<U>> p
) const;

Parameter

U
Die Schnittstelle, die durch Parameter pdargestellt werden soll.

p
Ein ComPtr Objekt, das die durch Parameter Uangegebene Schnittstelle darstellt. Der Parameter p darf nicht auf das aktuelle ComPtr Objekt verweisen.

Hinweise

Die erste Vorlage ist die Form, die Sie in Ihrem Code verwenden sollten. Die zweite Vorlage ist eine interne Hilfsspezialisierung. Es unterstützt C++-Sprachfeatures wie den auto Typabzug Schlüsselwort (keyword).

Rückgabewert

S_OK wenn erfolgreich; andernfalls gibt ein HRESULT , der den Fehler angibt.

ComPtr::AsIID

Gibt ein ComPtr Objekt zurück, das die durch die angegebene Schnittstellen-ID identifizierte Schnittstelle darstellt.

WRL_NOTHROW HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IUnknown>* p
) const;

Parameter

riid
Eine Schnittstellen-ID.

p
Wenn das Objekt über eine Schnittstelle verfügt, deren ID gleich ist riid, zeigt ein doubly indirekter Zeiger auf die schnittstelle, die durch den riid Parameter angegeben wird. Andernfalls zeigt ein Zeiger auf IUnknown.

Rückgabewert

S_OK wenn erfolgreich; andernfalls gibt ein HRESULT , der den Fehler angibt.

ComPtr::AsWeak

Ruft einen schwachen Verweis (WeakReference) auf das aktuelle Objekt ab.

HRESULT AsWeak(
   _Out_ WeakRef* pWeakRef
);

Parameter

pWeakRef
Wenn dieser Vorgang abgeschlossen ist, zeigt ein Zeiger auf ein schwaches Referenzobjekt.

Rückgabewert

S_OK, wenn erfolgreich; andernfalls ein HRESULT, das den Fehler angibt.

ComPtr::Attach

Ordnet dies ComPtr dem vom aktuellen Vorlagentypparameter angegebenen Schnittstellentyp zu.

void Attach(
   _In_opt_ InterfaceType* other
);

Parameter

other
Ein Schnittstellentyp.

ComPtr::ComPtr

Initialisiert eine neue Instanz der ComPtr-Klasse. Überladungen stellen Standard-, Kopier-, Verschiebe- und Konvertierungskonstruktoren bereit.

WRL_NOTHROW ComPtr();

WRL_NOTHROW ComPtr(
   decltype(__nullptr)
);

template<class U>
WRL_NOTHROW ComPtr(
   _In_opt_ U *other
);

WRL_NOTHROW ComPtr(
   const ComPtr& other
);

template<class U>
WRL_NOTHROW ComPtr(
   const ComPtr<U> &other,
   typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);

WRL_NOTHROW ComPtr(
   _Inout_ ComPtr &&other
);

template<class U>
WRL_NOTHROW ComPtr(
   _Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);

Parameter

U
Der Typ des other-Parameters.

other
Ein Objekt des Typs U.

Rückgabewert

Bemerkungen

Der erste Konstruktor ist der Standardkonstruktor, der implizit ein leeres Objekt erstellt. Der zweite Konstruktor gibt an __nullptr, welcher explizit ein leeres Objekt erstellt.

Der dritte Konstruktor erstellt ein Objekt aus dem durch einen Zeiger angegebenen Objekt. Das ComPtr ist nun der Besitz des verweisenden Speichers und Standard enthält eine Referenzanzahl.

Die vierten und fünften Konstruktoren sind Kopierkonstruktoren. Der fünfte Konstruktor kopiert ein Objekt, wenn es in den aktuellen Typ wandelt.

Die sechsten und siebten Konstruktoren sind Konstruktoren. Der siebte Konstruktor verschiebt ein Objekt, wenn es in den aktuellen Typ wandelt.

ComPtr::CopyTo

Kopiert die aktuelle oder angegebene Schnittstelle, die dieser ComPtr Schnittstelle zugeordnet ist, an den angegebenen Zeiger.

HRESULT CopyTo(
   _Deref_out_ InterfaceType** ptr
);

HRESULT CopyTo(
   REFIID riid,
   _Deref_out_ void** ptr
) const;

template<typename U>
HRESULT CopyTo(
   _Deref_out_ U** ptr
) const;

Parameter

U
Ein Typname.

ptr
Wenn dieser Vorgang abgeschlossen ist, zeigt ein Zeiger auf die angeforderte Schnittstelle.

riid
Eine Schnittstellen-ID.

Rückgabewert

S_OK wenn erfolgreich; andernfalls wird angegeben HRESULT , warum der implizite QueryInterface Vorgang fehlgeschlagen ist.

Hinweise

Die erste Funktion gibt eine Kopie eines Zeigers auf die schnittstelle zurück, die diesem ComPtrzugeordnet ist. Diese Funktion gibt immer zurück S_OK.

Die zweite Funktion führt einen QueryInterface Vorgang auf der Schnittstelle aus, die dieser ComPtr Schnittstelle für die vom riid Parameter angegebene Schnittstelle zugeordnet ist.

Die dritte Funktion führt einen QueryInterface Vorgang auf der Schnittstelle aus, die dieser ComPtr Schnittstelle für die zugrunde liegende Schnittstelle des U Parameters zugeordnet ist.

ComPtr::Detach

Hindert dieses ComPtr Objekt von der Schnittstelle, die es darstellt.

T* Detach();

Rückgabewert

Ein Zeiger auf die Schnittstelle, die durch dieses ComPtr Objekt dargestellt wurde.

ComPtr::Get

Ruft einen Zeiger auf die Schnittstelle ab, die dieser ComPtrSchnittstelle zugeordnet ist.

T* Get() const;

Rückgabewert

Zeiger auf die Schnittstelle, die dieser ComPtrSchnittstelle zugeordnet ist.

ComPtr::GetAddressOf

Ruft die Adresse des ptr_ Datenelements ab, das einen Zeiger auf die schnittstelle enthält, die durch diese ComPtrdargestellt wird.

T* const* GetAddressOf() const;
T** GetAddressOf();

Rückgabewert

Die Adresse einer Variablen.

ComPtr::InternalAddRef

Erhöht die Referenzanzahl der dieser ComPtrSchnittstelle zugeordneten Schnittstelle.

void InternalAddRef() const;

Hinweise

Diese Methode ist geschützt.

ComPtr::InternalRelease

Führt einen COM Release-Vorgang auf der schnittstelle aus, die diesem ComPtrzugeordnet ist.

unsigned long InternalRelease();

Hinweise

Diese Methode ist geschützt.

ComPtr::operator&

Gibt die diesem ComPtr Objekt zugeordnete Schnittstelle frei und ruft dann die Adresse des ComPtr Objekts ab.

Details::ComPtrRef<WeakRef> operator&()

const Details::ComPtrRef<const WeakRef> operator&() const

Rückgabewert

Ein schwacher Verweis auf den aktuellen ComPtr.

Hinweise

Diese Methode unterscheidet sich davon ComPtr::GetAddressOf , dass diese Methode einen Verweis auf den Schnittstellenzeiger freigibt. Verwenden Sie ComPtr::GetAddressOf diese Option, wenn Sie die Adresse des Schnittstellenzeigers benötigen, diese Schnittstelle jedoch nicht freigeben möchten.

ComPtr::operator->

Ruft einen Zeiger auf den Typ ab, der durch den aktuellen Vorlagenparameter angegeben ist.

WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;

Rückgabewert

Zeigen Sie auf den Typ, der durch den namen des aktuellen Vorlagentyps angegeben wird.

Hinweise

Diese Hilfsfunktion entfernt unnötigen Aufwand, der durch die Verwendung des STDMETHOD-Makros verursacht wird. Diese Funktion macht IUnknown Typen private anstelle von virtual.

ComPtr::operator=

Weist dem aktuellen ComPtrWert einen Wert zu.

WRL_NOTHROW ComPtr& operator=(
   decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
   _In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
   _In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
   const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
   const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
   _Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
   _Inout_ ComPtr<U>&& other
);

Parameter

U
Eine -Klasse.

other
Ein Zeiger, Bezug oder Wertbezug auf einen Typ oder einen anderen ComPtr.

Rückgabewert

Ein Verweis auf die aktuelle .ComPtr

Hinweise

Die erste Version dieses Operators weist dem aktuellen ComPtrWert einen leeren Wert zu.

Wenn der zugewiesene Schnittstellenzeiger in der zweiten Version nicht mit dem aktuellen ComPtr Schnittstellenzeiger übereinstimmt, wird dem aktuellen ComPtrSchnittstellenzeiger der zweite Schnittstellenzeiger zugewiesen.

In der dritten Version wird der zugewiesene Schnittstellenzeiger dem aktuellen ComPtrzugewiesen.

Wenn der Schnittstellenzeiger des zugewiesenen Werts in der vierten Version nicht mit dem aktuellen ComPtr Schnittstellenzeiger übereinstimmt, wird dem aktuellen ComPtrSchnittstellenzeiger der zweite Schnittstellenzeiger zugewiesen.

Die fünfte Version ist ein Kopieroperator; ein Verweis auf ein ComPtr Objekt wird dem aktuellen ComPtrzugewiesen.

Die sechste Version ist ein Kopieroperator, der die Bewegungssemantik verwendet. ein Wertverweis auf einen ComPtr Wert, wenn ein beliebiger Typ statisch ist, und dann dem aktuellen ComPtrzugeordnet ist.

Die siebte Version ist ein Kopieroperator, der die Bewegungssemantik verwendet; ein Wertverweis auf einen ComPtr Typ U ist statisch gegossen und dem aktuellen ComPtrzugeordnet.

ComPtr::operator==

Gibt an, ob zwei ComPtr-Objekte gleich sind.

bool operator==(
   const ComPtr<T>& a,
   const ComPtr<U>& b
);

bool operator==(
   const ComPtr<T>& a,
   decltype(__nullptr)
);

bool operator==(
   decltype(__nullptr),
   const ComPtr<T>& a
);

Parameter

a
Ein Verweis auf ein ComPtr-Objekt.

b
Ein Verweis auf ein anderes ComPtr Objekt.

Rückgabewert

Der erste Operator gibt an true , ob objekt a gleich Objekt bist; andernfalls false.

Die zweiten und dritten Operatoren liefern true , wenn das Objekt a gleich nullptrist ; andernfalls false.

ComPtr::operator!=

Gibt an, ob zwei ComPtr Objekte nicht gleich sind.

bool operator!=(
   const ComPtr<T>& a,
   const ComPtr<U>& b
);

bool operator!=(
   const ComPtr<T>& a,
   decltype(__nullptr)
);

bool operator!=(
   decltype(__nullptr),
   const ComPtr<T>& a
);

Parameter

a
Ein Verweis auf ein ComPtr-Objekt.

b
Ein Verweis auf ein anderes ComPtr Objekt.

Rückgabewert

Der erste Operator gibt an true , ob objekt a nicht gleich Objekt bist; andernfalls false.

Die zweiten und dritten Operatoren liefern true , wenn das Objekt a nicht gleich nullptrist ; andernfalls false.

ComPtr::operator Microsoft::WRL::Details::BoolType

Gibt an, ob die ComPtr Objektlebensdauer einer Schnittstelle verwaltet wird.

WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;

Rückgabewert

Wenn dieser Schnittstelle eine Schnittstelle zugeordnet ComPtrist, wird die Adresse des BoolStruct::Member Datenelements; andernfalls . nullptr

ComPtr::ptr_

Enthält einen Zeiger auf die Schnittstelle, die zugeordnet ist und von dieser ComPtrverwaltet wird.

InterfaceType *ptr_;

Hinweise

ptr_ ist ein internes, geschütztes Datenmitglied.

ComPtr::ReleaseAndGetAddressOf

Gibt die dieser ComPtr Schnittstelle zugeordnete Schnittstelle frei und ruft dann die Adresse des ptr_ Datenmemers ab, das einen Zeiger auf die freigegebene Schnittstelle enthält.

T** ReleaseAndGetAddressOf();

Rückgabewert

Die Adresse des ptr_ Datenmitglieds dieses ComPtr.

ComPtr::Reset

Gibt die dieser ComPtr Schnittstelle zugeordnete Schnittstelle frei und gibt die neue Referenzanzahl zurück.

unsigned long Reset();

Rückgabewert

Die Anzahl der Verweise, sofern vorhanden, auf die zugrunde liegende Schnittstelle erneut Standard.

ComPtr::Swap

Austauscht die schnittstelle, die vom aktuellen ComPtr verwaltet wird, mit der Schnittstelle, die vom angegebenen verwaltet ComPtrwird.

void Swap(
   _Inout_ ComPtr&& r
);

void Swap(
   _Inout_ ComPtr& r
);

Parameter

r
Ein ComPtr.