WeakRef
-Klasse
Stellt einen schwachen Verweis dar, der nur durch die Windows-Runtime und nicht durch die klassische COM verwendet werden kann. Ein schwacher Verweis repräsentiert ein Objekt, auf das möglicherweise zugegriffen werden kann.
Syntax
class WeakRef : public ComPtr<IWeakReference>;
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
WeakRef::WeakRef Konstruktor |
Initialisiert eine neue Instanz der WeakRef -Klasse. |
WeakRef::~WeakRef Destruktor |
Deinitialisiert die aktuelle Instanz der WeakRef Klasse. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
WeakRef::As |
Legt den angegebenen Zeigerparameter ComPtr fest, der die angegebene Schnittstelle darstellt. |
WeakRef::AsIID |
Legt den angegebenen Zeigerparameter ComPtr so fest, dass er die angegebene Schnittstellen-ID darstellt. |
WeakRef::CopyTo |
Weist einer Schnittstelle einen Zeiger zu, falls verfügbar zur angegebenen Zeigervariablen. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
WeakRef::operator& |
Gibt ein ComPtrRef Objekt zurück, das das aktuelle WeakRef Objekt darstellt. |
Hinweise
Ein WeakRef
Objekt verwaltet einen starken Verweis, der einem Objekt zugeordnet ist und gültig oder ungültig sein kann. Rufen Sie die As()
Methode auf AsIID()
, um einen starken Verweis abzurufen. Wenn der starke Verweis gültig ist, kann er auf das zugeordnete Objekt zugreifen. Wenn der starke Verweis ungültig ist (nullptr
), ist der Zugriff auf das zugeordnete Objekt nicht möglich.
Ein WeakRef
Objekt wird in der Regel verwendet, um ein Objekt darzustellen, dessen Vorhandensein von einem externen Thread oder einer externen Anwendung gesteuert wird. Erstellen Sie z. B. ein WeakRef
Objekt aus einem Verweis auf ein Dateiobjekt. Solange die Datei geöffnet ist, ist der starke Verweis gültig. Wenn die Datei aber geschlossen wird, wird der starke Verweis ungültig.
Es gibt eine Verhaltensänderung in den As
Methoden AsIID
und CopyTo
Methoden im Windows SDK. Nachdem Sie eine dieser Methoden aufgerufen haben, konnten Sie überprüfen WeakRef
nullptr
, ob ein starker Verweis erfolgreich abgerufen wurde, wie im folgenden Code:
WeakRef wr;
strongComptrRef.AsWeak(&wr);
// Now suppose that the object strongComPtrRef points to no longer exists
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);
// This check won't work with the Windows 10 SDK version of the library.
// Check the input pointer instead.
if(wr == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Der obige Code funktioniert nicht bei Verwendung des Windows 10 SDK (oder höher). Überprüfen Sie stattdessen den Zeiger, für nullptr
den sie übergeben wurde.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Vererbungshierarchie
Anforderungen
Header: client.h
Namespace:Microsoft::WRL
WeakRef::WeakRef
-Konstruktor
Initialisiert eine neue Instanz der WeakRef
-Klasse.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parameter
ptr
Ein Zeiger, Verweis oder Rvalue-Verweis auf ein vorhandenes Objekt, das das aktuelle WeakRef
Objekt initialisiert.
Hinweise
Der erste Konstruktor initialisiert ein leeres WeakRef
Objekt. Der zweite Konstruktor initialisiert ein WeakRef
Objekt von einem Zeiger auf die IWeakReference
Schnittstelle. Der dritte Konstruktor initialisiert ein WeakRef
Objekt aus einem Verweis auf ein ComPtr<IWeakReference>
Objekt. Der vierte und fünfte Konstruktor initialisieren ein Objekt aus einem WeakRef
anderen WeakRef
Objekt.
WeakRef::~WeakRef
Destruktor
Deinitialisiert die aktuelle Instanz der WeakRef
Klasse.
~WeakRef();
WeakRef::As
Legt den angegebenen Zeigerparameter ComPtr
fest, der die angegebene Schnittstelle darstellt.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parameter
U
Eine Schnittstellen-ID.
ptr
Wenn dieser Vorgang abgeschlossen ist, ist ein Objekt, das den Parameter U darstellt.
Rückgabewert
S_OK
wenn dieser Vorgang erfolgreich ist; andernfalls ein HRESULT, das angibt, warum der Vorgang fehlgeschlagen ist undptr
aufnullptr
.S_OK
Wenn dieser Vorgang erfolgreich ist, das aktuelleWeakRef
Objekt jedoch bereits freigegeben wurde. Derptr
-Parameter wird aufnullptr
festgelegt.S_OK
Wenn dieser Vorgang erfolgreich ist, aber das aktuelleWeakRef
Objekt nicht vom ParameterU
abgeleitet ist. Derptr
-Parameter wird aufnullptr
festgelegt.
Hinweise
Ein Fehler wird ausgegeben, wenn der Parameter U
ist IWeakReference
oder nicht von IInspectable
.
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".
Ab dem Windows 10 SDK legt diese Methode die WeakRef
Instanz nicht fest nullptr
, wenn der schwache Verweis nicht abgerufen werden konnte. Daher sollten Sie Fehlerüberprüfungscode vermeiden, der den WeakRef
nullptr
Fehler überprüft. Überprüfen Sie stattdessen ptr auf nullptr
.
WeakRef::AsIID
Legt den angegebenen Zeigerparameter ComPtr
so fest, dass er die angegebene Schnittstellen-ID darstellt.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parameter
riid
Eine Schnittstellen-ID.
ptr
Wenn dieser Vorgang abgeschlossen wird, ein Objekt, das den Parameter riid
darstellt.
Rückgabewert
S_OK
wenn dieser Vorgang erfolgreich ist; andernfalls ein HRESULT, das angibt, warum der Vorgang fehlgeschlagen ist undptr
aufnullptr
.S_OK
Wenn dieser Vorgang erfolgreich ist, das aktuelleWeakRef
Objekt jedoch bereits freigegeben wurde. Derptr
-Parameter wird aufnullptr
festgelegt.S_OK
Wenn dieser Vorgang erfolgreich ist, aber das aktuelleWeakRef
Objekt nicht vom Parameterriid
abgeleitet ist. Derptr
-Parameter wird aufnullptr
festgelegt. (Weitere Informationen finden Sie in den Hinweisen.)
Hinweise
Ein Fehler wird ausgegeben, wenn der Parameter riid
nicht von IInspectable
. Dieser Fehler hat Vorrang vor den Rückgabewert.
Die erste Vorlage ist die Form, die Sie in Ihrem Code verwenden sollten. Die zweite Vorlage (nicht hier dargestellt, sondern in der Headerdatei deklariert) ist eine interne Hilfsspezialisierung, die C++-Sprachfeatures wie das auto
Stichwort "Typabzug" unterstützt.
Ab dem Windows 10 SDK legt diese Methode die WeakRef
Instanz nicht fest nullptr
, wenn der schwache Verweis nicht abgerufen werden konnte. Daher sollten Sie Fehlerüberprüfungscode vermeiden, der den WeakRef
nullptr
Fehler überprüft. Suchen Sie ptr
stattdessen nach nullptr
.
WeakRef::CopyTo
Weist einer Schnittstelle einen Zeiger zu, falls verfügbar zur angegebenen Zeigervariablen.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parameter
U
Zeiger einer IInspectable
Schnittstelle. Es wird ein Fehler ausgegeben, wenn U
er nicht von IInspectable
.
riid
Eine Schnittstellen-ID. Es wird ein Fehler ausgegeben, wenn riid
er nicht von IWeakReference
.
ptr
Ein doubly indirekter Zeiger auf IInspectable
oder IWeakReference
.
Rückgabewert
S_OK
wenn erfolgreich; andernfalls ein HRESULT, das den Fehler beschreibt. Weitere Informationen finden Sie in den Hinweisen.
Hinweise
Ein Rückgabewert bedeutet S_OK
, dass dieser Vorgang erfolgreich war, aber nicht angibt, ob der schwache Verweis auf einen starken Verweis aufgelöst wurde. Wenn S_OK
dieser Parameter zurückgegeben wird, testen Sie diesen Parameter ptr
als starken Verweis, d. h. der Parameter ptr
ist nicht gleich nullptr
.
Ab dem Windows 10 SDK legt diese Methode die WeakRef
Instanz nicht fest nullptr
, wenn der schwache Verweis nicht abgerufen werden konnte. Daher sollten Sie Fehlerüberprüfungscode vermeiden, der die WeakRef
nullptr
Überprüfung der Datei überprüft. Suchen Sie ptr
stattdessen nach nullptr
.
WeakRef::operator&
Gibt ein ComPtrRef
Objekt zurück, das das aktuelle WeakRef
Objekt darstellt.
Details::ComPtrRef<WeakRef> operator&() throw()
Rückgabewert
Ein ComPtrRef
Objekt, das das aktuelle WeakRef
Objekt darstellt.
Hinweise
WeakRef::operator&
ist ein interner Hilfsoperator, der nicht in Ihrem Code verwendet werden soll.