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 Standard enthält 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

ComPtr
 └ WeakRef

Anforderungen

Headerclient.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 und ptr auf nullptr.

  • S_OK Wenn dieser Vorgang erfolgreich ist, das aktuelle WeakRef Objekt jedoch bereits freigegeben wurde. Der ptr -Parameter wird auf nullptrfestgelegt.

  • S_OK Wenn dieser Vorgang erfolgreich ist, aber das aktuelle WeakRef Objekt nicht vom Parameter Uabgeleitet ist. Der ptr -Parameter wird auf nullptrfestgelegt.

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 z. B. den auto Typabzug Schlüsselwort (keyword).

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_OK wenn dieser Vorgang erfolgreich ist; andernfalls ein HRESULT, das angibt, warum der Vorgang fehlgeschlagen ist und ptr auf nullptr.

  • S_OK Wenn dieser Vorgang erfolgreich ist, das aktuelle WeakRef Objekt jedoch bereits freigegeben wurde. Der ptr -Parameter wird auf nullptrfestgelegt.

  • S_OK Wenn dieser Vorgang erfolgreich ist, aber das aktuelle WeakRef Objekt nicht vom Parameter riidabgeleitet ist. Der ptr -Parameter wird auf nullptrfestgelegt. (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 (hier nicht dargestellt, aber in der Headerdatei deklariert) ist eine interne Hilfsspezialisierung, die C++-Sprachfeatures wie den auto Typabzug Schlüsselwort (keyword) 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.