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 ComPtr Schnittstelle zugeordnet ist. |
ComPtr::GetAddressOf |
Ruft die Adresse des ptr_ Datenelements ab, das einen Zeiger auf die schnittstelle enthält, die durch diese ComPtr dargestellt 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 ComPtr wird. |
Geschützte Methoden
Name | Beschreibung |
---|---|
ComPtr::InternalAddRef |
Erhöht die Referenzanzahl der dieser ComPtr Schnittstelle zugeordneten Schnittstelle. |
ComPtr::InternalRelease |
Führt einen COM Release-Vorgang auf der schnittstelle aus, die diesem ComPtr zugeordnet 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 ComPtr Wert 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 ComPtr verwaltet wird. |
Vererbungshierarchie
ComPtr
Anforderungen
Header: client.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 p
dargestellt werden soll.
p
Ein ComPtr
Objekt, das die durch Parameter U
angegebene 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 das auto
Stichwort "Typabzug".
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. Der ComPtr
Besitz besitzt nun den speicherzweisigen Speicher und verwaltet 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 ComPtr
zugeordnet 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 ComPtr
Schnittstelle zugeordnet ist.
T* Get() const;
Rückgabewert
Zeiger auf die Schnittstelle, die dieser ComPtr
Schnittstelle zugeordnet ist.
ComPtr::GetAddressOf
Ruft die Adresse des ptr_
Datenelements ab, das einen Zeiger auf die schnittstelle enthält, die durch diese ComPtr
dargestellt wird.
T* const* GetAddressOf() const;
T** GetAddressOf();
Rückgabewert
Die Adresse einer Variablen.
ComPtr::InternalAddRef
Erhöht die Referenzanzahl der dieser ComPtr
Schnittstelle 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 ComPtr
zugeordnet 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 ComPtr
Wert 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 ComPtr
Wert einen leeren Wert zu.
Wenn der zugewiesene Schnittstellenzeiger in der zweiten Version nicht mit dem aktuellen ComPtr
Schnittstellenzeiger übereinstimmt, wird dem aktuellen ComPtr
Schnittstellenzeiger der zweite Schnittstellenzeiger zugewiesen.
In der dritten Version wird der zugewiesene Schnittstellenzeiger dem aktuellen ComPtr
zugewiesen.
Wenn der Schnittstellenzeiger des zugewiesenen Werts in der vierten Version nicht mit dem aktuellen ComPtr
Schnittstellenzeiger übereinstimmt, wird dem aktuellen ComPtr
Schnittstellenzeiger der zweite Schnittstellenzeiger zugewiesen.
Die fünfte Version ist ein Kopieroperator; ein Verweis auf ein ComPtr
Objekt wird dem aktuellen ComPtr
zugewiesen.
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 ComPtr
zugeordnet ist.
Die siebte Version ist ein Kopieroperator, der die Bewegungssemantik verwendet; ein Wertverweis auf einen ComPtr
Typ U
ist statisch gegossen und dem aktuellen ComPtr
zugeordnet.
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 b
ist; andernfalls false
.
Die zweiten und dritten Operatoren liefern true
, wenn das Objekt a
gleich nullptr
ist ; 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 b
ist; andernfalls false
.
Die zweiten und dritten Operatoren liefern true
, wenn das Objekt a
nicht gleich nullptr
ist ; 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 ComPtr
ist, wird die Adresse des BoolStruct::Member
Datenelements; andernfalls . nullptr
ComPtr::ptr_
Enthält einen Zeiger auf die Schnittstelle, die zugeordnet ist und von dieser ComPtr
verwaltet 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, die auf der zugrunde liegenden Schnittstelle verbleiben, falls vorhanden.
ComPtr::Swap
Austauscht die schnittstelle, die vom aktuellen ComPtr
verwaltet wird, mit der Schnittstelle, die vom angegebenen verwaltet ComPtr
wird.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parameter
r
Ein ComPtr
.