Megosztás a következőn keresztül:


WeakRef osztály

Gyenge hivatkozást jelöl, amelyet csak a Windows futtatókörnyezet használhat, a klasszikus COM-t nem. A gyenge hivatkozás olyan objektumot jelöl, amely esetleg nem érhető el.

Szemantika

class WeakRef : public ComPtr<IWeakReference>;

Tagok

Nyilvános konstruktorok

Név Leírás
WeakRef::WeakRef Konstruktor Inicializálja a WeakRef osztály új példányát.
WeakRef::~WeakRef Destruktor Deinitializálja az osztály aktuális példányát WeakRef .

Nyilvános metódusok

Név Leírás
WeakRef::As Beállítja a megadott ComPtr mutatóparamétert a megadott felületnek.
WeakRef::AsIID A megadott ComPtr mutatóparamétert úgy állítja be, hogy a megadott felületazonosítót képviselje.
WeakRef::CopyTo Ha elérhető, egy mutatót rendel hozzá a megadott mutatóváltozóhoz.

Nyilvános operátorok

Név Leírás
WeakRef::operator& ComPtrRef Az aktuális WeakRef objektumot jelképező objektumot ad vissza.

Megjegyzések

Egy WeakRef objektum erős hivatkozást tart fenn, amely egy objektumhoz van társítva, és érvényes vagy érvénytelen lehet. Hívja meg az As() vagy AsIID() a metódust egy erős hivatkozás beszerzéséhez. Ha az erős hivatkozás érvényes, hozzáférhet a társított objektumhoz. Ha az erős hivatkozás érvénytelen (nullptr), a társított objektum nem érhető el.

Az WeakRef objektumokat általában egy olyan objektum ábrázolására használják, amelynek létezését külső szál vagy alkalmazás vezérli. Például hozzon létre egy WeakRef objektumot egy fájlobjektumra mutató hivatkozásból. Amíg a fájl meg van nyitva, az erős hivatkozás érvényes. Ha azonban a fájl bezárul, az erős hivatkozás érvénytelenné válik.

A Windows SDK-ban viselkedésbeli változás történt a As, AsIIDés CopyTo metódusokban. Korábban a metódusok bármelyikének meghívása után ellenőrizheti WeakRefnullptr , hogy sikerült-e erős hivatkozást beszerezni, ahogyan az alábbi kódban is látható:

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!");
}

A fenti kód nem működik a Windows 10 SDK (vagy újabb) használatakor. Ehelyett ellenőrizze a megadott mutatót nullptr.

if (strongRef == nullptr)
{
    wprintf(L"Couldn't get strong ref!");
}

Öröklési hierarchia

ComPtr
 └ WeakRef

Követelmények

Fejléc:client.h

Névtér:Microsoft::WRL

WeakRef::WeakRef Konstruktor

Inicializálja a WeakRef osztály új példányát.

WeakRef();
WeakRef(
   decltype(__nullptr)
);

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Paraméterek

ptr
Mutató, hivatkozás vagy rvalue-hivatkozás egy meglévő objektumra, amely inicializálja az aktuális WeakRef objektumot.

Megjegyzések

Az első konstruktor inicializál egy üres WeakRef objektumot. A második konstruktor inicializál egy WeakRef objektumot egy mutatóból a IWeakReference felületre. A harmadik konstruktor inicializál egy WeakRef objektumot egy ComPtr<IWeakReference> objektumra mutató hivatkozásból. A negyedik és ötödik konstruktorok inicializálnak egy objektumot WeakRef egy másik WeakRef objektumból.

WeakRef::~WeakRef Destruktor

Deinitializálja az osztály aktuális példányát WeakRef .

~WeakRef();

WeakRef::As

Beállítja a megadott ComPtr mutatóparamétert a megadott felületnek.

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

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

Paraméterek

U
Egy felületazonosító.

ptr
Ha ez a művelet befejeződik, egy objektum, amely az U paramétert jelöli.

Visszaadott érték

  • S_OK ha ez a művelet sikeres; ellenkező esetben egy HRESULT, amely jelzi a művelet sikertelen voltának okát, és ptr a következőre nullptrvan állítva: .

  • S_OK ha ez a művelet sikeres, de az aktuális WeakRef objektum már ki lett adva. A paraméter ptr értéke .nullptr

  • S_OK ha ez a művelet sikeres, de az aktuális WeakRef objektum nem a paraméterből Uszármazik. A paraméter ptr értéke .nullptr

Megjegyzések

Hiba jelenik meg, ha a paraméter U származik IWeakReferencevagy nem származik belőle IInspectable.

Az első sablon a kódban használni kívánt űrlap. A második sablon egy belső, segítő specializáció; támogatja a C++ nyelvi funkciókat, például a auto típuslevonási kulcsszót.

A Windows 10 SDK-tól kezdve ez a módszer nem állítja be a példányt nullptr arra az WeakRef esetre, ha a gyenge referenciát nem sikerült beszerezni, ezért kerülnie kell a hibaellenőrzési kódot, amely ellenőrzi a WeakRefnullptrhibát. Ehelyett ellenőrizze a ptr billentyűt nullptr.

WeakRef::AsIID

A megadott ComPtr mutatóparamétert úgy állítja be, hogy a megadott felületazonosítót képviselje.

HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IInspectable>* ptr
);

Paraméterek

riid
Egy felületazonosító.

ptr
Ha ez a művelet befejeződik, egy paramétert riidképviselő objektum.

Visszaadott érték

  • S_OK ha ez a művelet sikeres; ellenkező esetben egy HRESULT, amely jelzi a művelet sikertelen voltának okát, és ptr a következőre nullptrvan állítva: .

  • S_OK ha ez a művelet sikeres, de az aktuális WeakRef objektum már ki lett adva. A paraméter ptr értéke .nullptr

  • S_OK ha ez a művelet sikeres, de az aktuális WeakRef objektum nem a paraméterből riidszármazik. A paraméter ptr értéke .nullptr További információ: Megjegyzések.

Megjegyzések

Hiba jelenik meg, ha a paraméter riid nem származik belőle IInspectable. Ez a hiba felülírja a visszatérési értéket.

Az első sablon a kódban használni kívánt űrlap. A második sablon (itt nem jelenik meg, de a fejlécfájlban deklarálva) egy belső, segítő specializáció, amely támogatja a C++ nyelvi funkciókat, például a auto típuslevonási kulcsszót.

A Windows 10 SDK-tól kezdve ez a módszer nem állítja be a példányt nullptr arra az WeakRef esetre, ha a gyenge referenciát nem sikerült beszerezni, ezért kerülnie kell a hibaellenőrzési kódot, amely ellenőrzi a WeakRefnullptrhibát. Ehelyett ellenőrizze ptr a következőt nullptr: .

WeakRef::CopyTo

Ha elérhető, egy mutatót rendel hozzá a megadott mutatóváltozóhoz.

HRESULT CopyTo(
   REFIID riid,
   _Deref_out_ IInspectable** ptr
);

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

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Paraméterek

U
Mutasson egy felületre IInspectable . Hiba jelenik meg, ha U nem származik belőle IInspectable.

riid
Egy felületazonosító. Hiba jelenik meg, ha riid nem származik belőle IWeakReference.

ptr
Kétszeresen közvetett mutató a következőre IInspectable vagy IWeakReference.

Visszaadott érték

S_OK ha sikeres; ellenkező esetben egy HRESULT, amely leírja a hibát. További információ: Megjegyzések.

Megjegyzések

A visszatérési S_OK érték azt jelenti, hogy ez a művelet sikeres volt, de nem jelzi, hogy a gyenge hivatkozás erős hivatkozásra lett-e feloldva. Ha S_OK a visszaadott paraméter erős hivatkozás, azaz a paraméter ptrptr nem egyenlő .nullptr

A Windows 10 SDK-tól kezdve ez a módszer nem állítja be a példányt nullptr arra az WeakRef esetre, ha a gyenge referenciát nem sikerült beszerezni, ezért kerülnie kell a hibaellenőrzési kódot, amely ellenőrzi a WeakRefnullptrhibát. Ehelyett ellenőrizze ptr a következőt nullptr: .

WeakRef::operator&

ComPtrRef Az aktuális WeakRef objektumot jelképező objektumot ad vissza.

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

Visszaadott érték

Az ComPtrRef aktuális WeakRef objektumot jelképező objektum.

Megjegyzések

WeakRef::operator& egy belső segítő operátor, amelyet nem kell használni a kódban.