Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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_OKha ez a művelet sikeres; ellenkező esetben egy HRESULT, amely jelzi a művelet sikertelen voltának okát, ésptra következőrenullptrvan állítva: .S_OKha ez a művelet sikeres, de az aktuálisWeakRefobjektum már ki lett adva. A paraméterptrértéke .nullptrS_OKha ez a művelet sikeres, de az aktuálisWeakRefobjektum nem a paraméterbőlUszármazik. A paraméterptré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_OKha ez a művelet sikeres; ellenkező esetben egy HRESULT, amely jelzi a művelet sikertelen voltának okát, ésptra következőrenullptrvan állítva: .S_OKha ez a művelet sikeres, de az aktuálisWeakRefobjektum már ki lett adva. A paraméterptrértéke .nullptrS_OKha ez a művelet sikeres, de az aktuálisWeakRefobjektum nem a paraméterbőlriidszármazik. A paraméterptrértéke .nullptrTová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.