Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třída
Představuje slabý odkaz, který lze použít pouze prostředí Windows Runtime, nikoli klasický com. Slabý odkaz představuje objekt, který může nebo nemusí být přístupný.
Syntaxe
class WeakRef : public ComPtr<IWeakReference>;
Členové
Veřejné konstruktory
| Název | Popis |
|---|---|
WeakRef::WeakRef konstruktor |
Inicializuje novou instanci WeakRef třídy. |
WeakRef::~WeakRef destruktor |
Deinicializuje aktuální instanci WeakRef třídy. |
Veřejné metody
| Název | Popis |
|---|---|
WeakRef::As |
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané rozhraní. |
WeakRef::AsIID |
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané ID rozhraní. |
WeakRef::CopyTo |
Přiřadí ukazatel k rozhraní, pokud je k dispozici, k zadané proměnné ukazatele. |
Veřejné operátory
| Název | Popis |
|---|---|
WeakRef::operator& |
ComPtrRef Vrátí objekt, který představuje aktuální WeakRef objekt. |
Poznámky
Objekt WeakRef udržuje silný odkaz, který je přidružen k objektu a může být platný nebo neplatný. Voláním nebo As() metodou AsIID() získáte silný odkaz. Pokud je silný odkaz platný, může přistupovat k přidruženému objektu. Pokud je silný odkaz neplatný (nullptr), přidružený objekt je nepřístupný.
Objekt WeakRef se obvykle používá k reprezentaci objektu, jehož existence je řízena externím vláknem nebo aplikací. Můžete například vytvořit WeakRef objekt z odkazu na objekt souboru. I když je soubor otevřený, silný odkaz je platný. Pokud je ale soubor zavřený, silný odkaz bude neplatný.
V sadě AsAsIIDWindows SDK došlo ke změně chování a CopyTo metod. Dříve po volání některé z těchto metod byste mohli zkontrolovat WeakRefnullptr , zda byl úspěšně získán silný odkaz, jako v následujícím kódu:
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!");
}
Výše uvedený kód nefunguje při použití sady Windows 10 SDK (nebo novější). Místo toho zkontrolujte ukazatel, který byl předán pro nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarchie dědičnosti
Požadavky
Záhlaví:client.h
Obor názvů:Microsoft::WRL
WeakRef::WeakRef konstruktor
Inicializuje novou instanci WeakRef třídy.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parametry
ptr
Ukazatel, odkaz nebo rvalue odkaz na existující objekt, který inicializuje aktuální WeakRef objekt.
Poznámky
První konstruktor inicializuje prázdný WeakRef objekt. Druhý konstruktor inicializuje WeakRef objekt z ukazatele na IWeakReference rozhraní. Třetí konstruktor inicializuje WeakRef objekt z odkazu na ComPtr<IWeakReference> objekt. Čtvrtý a pátý konstruktor inicializuje WeakRef objekt z jiného WeakRef objektu.
WeakRef::~WeakRef destruktor
Deinicializuje aktuální instanci WeakRef třídy.
~WeakRef();
WeakRef::As
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané rozhraní.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parametry
U
ID rozhraní.
ptr
Po dokončení této operace objekt, který představuje parametr U.
Vrácená hodnota
S_OKje-li tato operace úspěšná; v opačném případě hodnota HRESULT, která označuje důvod selhání operace aptrje nastavena nanullptrhodnotu .S_OKPokud je tato operace úspěšná, ale aktuálníWeakRefobjekt již byl vydán. Parametrptrje nastaven nanullptrhodnotu .S_OKpokud je tato operace úspěšná, ale aktuálníWeakRefobjekt není odvozen z parametruU. Parametrptrje nastaven nanullptrhodnotu .
Poznámky
Chyba se vygeneruje, pokud je Uparametr IWeakReference nebo není odvozen z IInspectable.
První šablona je formulář, který byste měli použít v kódu. Druhá šablona je interní pomocná specializace; podporuje funkce jazyka C++, jako je klíčové slovo odpočtu auto typu.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef instanci na to, jestli nullptr se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kódu kontroly chyb, který kontroluje WeakRef hodnotu nullptr. Místo toho zkontrolujte, jestli není .nullptr
WeakRef::AsIID
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané ID rozhraní.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parametry
riid
ID rozhraní.
ptr
Po dokončení této operace objekt, který představuje parametr riid.
Vrácená hodnota
S_OKje-li tato operace úspěšná; v opačném případě hodnota HRESULT, která označuje důvod selhání operace aptrje nastavena nanullptrhodnotu .S_OKPokud je tato operace úspěšná, ale aktuálníWeakRefobjekt již byl vydán. Parametrptrje nastaven nanullptrhodnotu .S_OKpokud je tato operace úspěšná, ale aktuálníWeakRefobjekt není odvozen z parametruriid. Parametrptrje nastaven nanullptrhodnotu . Další informace naleznete v tématu Poznámky.
Poznámky
Chyba se vygeneruje, pokud riid parametr není odvozen z IInspectable. Tato chyba nahrazuje vrácenou hodnotu.
První šablona je formulář, který byste měli použít v kódu. Druhá šablona (zde není zobrazena, ale deklarována v souboru hlaviček) je interní pomocná specializace, která podporuje funkce jazyka C++, jako je klíčové slovo odpočtu auto typu.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef instanci na to, jestli nullptr se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kódu kontroly chyb, který kontroluje WeakRef hodnotu nullptr. Místo toho zkontrolujte ptrnullptr.
WeakRef::CopyTo
Přiřadí ukazatel k rozhraní, pokud je k dispozici, k zadané proměnné ukazatele.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parametry
U
IInspectable Ukazatel rozhraní. Pokud se neodvozuje U z IInspectable.
riid
ID rozhraní. Pokud se neodvozuje riid z IWeakReference.
ptr
Doubly nepřímý ukazatel na IInspectable nebo IWeakReference.
Vrácená hodnota
S_OK v případě úspěchu; jinak hodnota HRESULT, která popisuje selhání. Další informace naleznete v tématu Poznámky.
Poznámky
Návratová S_OK hodnota znamená, že tato operace proběhla úspěšně, ale nezoznačuje, jestli byl slabý odkaz přeložen na silný odkaz. Pokud S_OK se vrátí, otestujte, že parametr ptr je silným odkazem. To znamená, že parametr ptr není roven nullptr.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef instanci na to, jestli nullptr se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kontrole chyb, který kontroluje WeakRefnullptrkód . Místo toho zkontrolujte ptrnullptr.
WeakRef::operator&
ComPtrRef Vrátí objekt, který představuje aktuální WeakRef objekt.
Details::ComPtrRef<WeakRef> operator&() throw()
Vrácená hodnota
Objekt ComPtrRef , který představuje aktuální WeakRef objekt.
Poznámky
WeakRef::operator& je interní pomocný operátor, který není určený k použití v kódu.