Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 AsMethoden AsIIDund CopyTo Methoden im Windows SDK. Nachdem Sie eine dieser Methoden aufgerufen haben, konnten Sie überprüfen WeakRefnullptr , 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 nullptrden sie übergeben wurde.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Vererbungshierarchie
Anforderungen
Kopfball: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_OKwenn dieser Vorgang erfolgreich ist; andernfalls ein HRESULT, das angibt, warum der Vorgang fehlgeschlagen ist undptraufnullptr.S_OKWenn dieser Vorgang erfolgreich ist, das aktuelleWeakRefObjekt jedoch bereits freigegeben wurde. Derptr-Parameter wird aufnullptrfestgelegt.S_OKWenn dieser Vorgang erfolgreich ist, aber das aktuelleWeakRefObjekt nicht vom ParameterUabgeleitet ist. Derptr-Parameter wird aufnullptrfestgelegt.
Hinweise
Ein Fehler wird ausgegeben, wenn der Parameter U ist IWeakReferenceoder 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 WeakRefnullptrFehler ü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 riiddarstellt.
Rückgabewert
S_OKwenn dieser Vorgang erfolgreich ist; andernfalls ein HRESULT, das angibt, warum der Vorgang fehlgeschlagen ist undptraufnullptr.S_OKWenn dieser Vorgang erfolgreich ist, das aktuelleWeakRefObjekt jedoch bereits freigegeben wurde. Derptr-Parameter wird aufnullptrfestgelegt.S_OKWenn dieser Vorgang erfolgreich ist, aber das aktuelleWeakRefObjekt nicht vom Parameterriidabgeleitet ist. Derptr-Parameter wird aufnullptrfestgelegt. 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 WeakRefnullptrFehler ü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 WeakRefnullptrÜ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.