Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Representerar en svag referens som endast kan användas av Windows Runtime, inte klassisk COM. En svag referens representerar ett objekt som kanske eller kanske inte är tillgängligt.
Syntax
class WeakRef : public ComPtr<IWeakReference>;
Medlemmar
Offentliga konstruktorer
| Namn | Beskrivning |
|---|---|
WeakRef::WeakRef konstruktor |
Initierar en ny instans av klassen WeakRef. |
WeakRef::~WeakRef Destructor |
Deinitialiserar den aktuella instansen WeakRef av klassen. |
Offentliga metoder
| Namn | Beskrivning |
|---|---|
WeakRef::As |
Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnittet. |
WeakRef::AsIID |
Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnitts-ID:t. |
WeakRef::CopyTo |
Tilldelar en pekare till ett gränssnitt, om det är tillgängligt, till den angivna pekarvariabeln. |
Offentliga operatörer
| Namn | Beskrivning |
|---|---|
WeakRef::operator& |
Returnerar ett ComPtrRef objekt som representerar det aktuella WeakRef objektet. |
Anmärkningar
Ett WeakRef objekt har en stark referens som är associerad med ett objekt och kan vara giltigt eller ogiltigt.
As() Anropa metoden eller AsIID() för att hämta en stark referens. När den starka referensen är giltig kan den komma åt det associerade objektet. När den starka referensen är ogiltig (nullptr) är det associerade objektet otillgängligt.
Ett WeakRef objekt används vanligtvis för att representera ett objekt vars existens styrs av en extern tråd eller ett program. Skapa till exempel ett WeakRef objekt från en referens till ett filobjekt. När filen är öppen är den starka referensen giltig. Men om filen stängs blir den starka referensen ogiltig.
Det finns en beteendeförändring i Asmetoderna , AsIIDoch CopyTo i Windows SDK. Tidigare, efter att ha anropat någon av dessa metoder, kan du söka efter WeakRef för nullptr att avgöra om en stark referens har hämtats, som i följande kod:
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!");
}
Koden ovan fungerar inte när du använder Windows 10 SDK (eller senare). Kontrollera i stället pekaren som skickades i för nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Arvshierarki
Kravspecifikation
Rubrik:client.h
Namespace:Microsoft::WRL
WeakRef::WeakRef konstruktor
Initierar en ny instans av klassen WeakRef.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parameterar
ptr
En pekare, referens eller rvalue-reference till ett befintligt objekt som initierar det aktuella WeakRef objektet.
Anmärkningar
Den första konstruktorn initierar ett tomt WeakRef objekt. Den andra konstruktorn initierar ett WeakRef objekt från en pekare till IWeakReference gränssnittet. Den tredje konstruktorn initierar ett WeakRef objekt från en referens till ett ComPtr<IWeakReference> objekt. Den fjärde och femte konstruktorn initierar ett objekt från ett WeakRef annat WeakRef objekt.
WeakRef::~WeakRef Destructor
Deinitialiserar den aktuella instansen WeakRef av klassen.
~WeakRef();
WeakRef::As
Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnittet.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parameterar
U
Ett gränssnitts-ID.
ptr
När den här åtgärden är klar, ett objekt som representerar parameterN U.
Returvärde
S_OKom den här åtgärden lyckas. annars en HRESULT som anger orsaken till att åtgärden misslyckades ochpträr inställd pånullptr.S_OKom den här åtgärden lyckas, men det aktuellaWeakRefobjektet redan har släppts. Parameternpträr inställd pånullptr.S_OKom den här åtgärden lyckas, men det aktuellaWeakRefobjektet inte härleds från parameternU. Parameternpträr inställd pånullptr.
Anmärkningar
Ett fel genereras om parametern U är IWeakReference, eller inte härleds från IInspectable.
Den första mallen är det formulär som du bör använda i koden. Den andra mallen är en intern hjälpspecialisering. det stöder C++-språkfunktioner, till exempel nyckelordet auto typavdrag.
Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontrollkod som söker efter WeakRefnullptr. Kontrollera i stället ptr för nullptr.
WeakRef::AsIID
Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnitts-ID:t.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parameterar
riid
Ett gränssnitts-ID.
ptr
När den här åtgärden är klar visas ett objekt som representerar parametern riid.
Returvärde
S_OKom den här åtgärden lyckas. annars en HRESULT som anger orsaken till att åtgärden misslyckades ochpträr inställd pånullptr.S_OKom den här åtgärden lyckas, men det aktuellaWeakRefobjektet redan har släppts. Parameternpträr inställd pånullptr.S_OKom den här åtgärden lyckas, men det aktuellaWeakRefobjektet inte härleds från parameternriid. Parameternpträr inställd pånullptr. Mer information finns i Anmärkningar.
Anmärkningar
Ett fel genereras om parametern riid inte härleds från IInspectable. Det här felet ersätter returvärdet.
Den första mallen är det formulär som du bör använda i koden. Den andra mallen (visas inte här, men deklareras i huvudfilen) är en intern hjälpspecialisering som stöder C++-språkfunktioner som nyckelordet auto typavdrag.
Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontrollkod som söker efter WeakRefnullptr. Sök i stället efter ptrnullptr.
WeakRef::CopyTo
Tilldelar en pekare till ett gränssnitt, om det är tillgängligt, till den angivna pekarvariabeln.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parameterar
U
Pekar ett IInspectable gränssnitt. Ett fel genereras om U det inte härleds från IInspectable.
riid
Ett gränssnitts-ID. Ett fel genereras om riid det inte härleds från IWeakReference.
ptr
En dubbelt indirekt pekare till IInspectable eller IWeakReference.
Returvärde
S_OK om det lyckas; annars en HRESULT som beskriver felet. Mer information finns i Kommentarer.
Anmärkningar
Ett returvärde S_OK för innebär att åtgärden lyckades, men anger inte om den svaga referensen har lösts till en stark referens. Om S_OK returneras testar du att parametern ptr är en stark referens. Parametern ptr är alltså inte lika med nullptr.
Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontroll av kod som söker efter WeakRefnullptr. Sök i stället efter ptrnullptr.
WeakRef::operator&
Returnerar ett ComPtrRef objekt som representerar det aktuella WeakRef objektet.
Details::ComPtrRef<WeakRef> operator&() throw()
Returvärde
Ett ComPtrRef objekt som representerar det aktuella WeakRef objektet.
Anmärkningar
WeakRef::operator& är en intern hjälpoperator som inte är avsedd att användas i koden.