Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vertegenwoordigt een zwakke verwijzing die alleen kan worden gebruikt door de Windows Runtime, niet de klassieke COM. Een zwakke verwijzing vertegenwoordigt een object dat al dan niet toegankelijk is.
Syntaxis
class WeakRef : public ComPtr<IWeakReference>;
Leden
Openbare constructors
| Naam | Beschrijving |
|---|---|
WeakRef::WeakRef bouwer |
Initialiseert een nieuw exemplaar van de klasse WeakRef. |
WeakRef::~WeakRef destructor |
Deinitiaaliseert het huidige exemplaar van de WeakRef klasse. |
Openbare methoden
| Naam | Beschrijving |
|---|---|
WeakRef::As |
Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface weer te geven. |
WeakRef::AsIID |
Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface-id weer te geven. |
WeakRef::CopyTo |
Wijst een aanwijzer toe aan een interface, indien beschikbaar, aan de opgegeven aanwijzervariabele. |
Openbare operators
| Naam | Beschrijving |
|---|---|
WeakRef::operator& |
Retourneert een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt. |
Opmerkingen
Een WeakRef object onderhoudt een sterke verwijzing, die is gekoppeld aan een object en kan geldig of ongeldig zijn. Roep de As() of AsIID() methode aan om een sterke referentie te verkrijgen. Wanneer de sterke verwijzing geldig is, heeft deze toegang tot het bijbehorende object. Wanneer de sterke verwijzing ongeldig is (nullptr), is het bijbehorende object niet toegankelijk.
Een WeakRef object wordt meestal gebruikt om een object te vertegenwoordigen waarvan het bestaan wordt bepaald door een externe thread of toepassing. Maak bijvoorbeeld een WeakRef object op basis van een verwijzing naar een bestandsobject. Terwijl het bestand is geopend, is de sterke verwijzing geldig. Maar als het bestand is gesloten, wordt de sterke verwijzing ongeldig.
Er is een gedragswijziging in de As, AsIIDen CopyTo methoden in de Windows SDK. Nadat u een van deze methoden hebt aangeroepen, kunt u eerst controleren WeakRefnullptr of er een sterke verwijzing is verkregen, zoals in de volgende 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!");
}
De bovenstaande code werkt niet wanneer u de Windows 10 SDK (of hoger) gebruikt. Controleer in plaats daarvan de aanwijzer die is doorgegeven voor nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Overnamehiërarchie
Behoeften
Rubriek:client.h
Namespace:Microsoft::WRL
WeakRef::WeakRef bouwer
Initialiseert een nieuw exemplaar van de klasse WeakRef.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parameterwaarden
ptr
Een aanwijzer, verwijzing of rvalue-verwijzing naar een bestaand object dat het huidige WeakRef object initialiseert.
Opmerkingen
De eerste constructor initialiseert een leeg WeakRef object. De tweede constructor initialiseert een WeakRef object van een aanwijzer naar de IWeakReference interface. De derde constructor initialiseert een WeakRef object van een verwijzing naar een ComPtr<IWeakReference> object. De vierde en vijfde constructors initialiseren een WeakRef object van een ander WeakRef object.
WeakRef::~WeakRef destructor
Deinitiaaliseert het huidige exemplaar van de WeakRef klasse.
~WeakRef();
WeakRef::As
Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface weer te geven.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parameterwaarden
U
Een interface-id.
ptr
Wanneer deze bewerking is voltooid, wordt een object dat parameter U vertegenwoordigt.
Retourwaarde
S_OKals deze bewerking slaagt; anders een HRESULT dat aangeeft waarom de bewerking is mislukt enptris ingesteld opnullptr.S_OKals deze bewerking slaagt, maar het huidigeWeakRefobject al is vrijgegeven. De parameterptris ingesteld opnullptr.S_OKals deze bewerking is geslaagd, maar het huidigeWeakRefobject niet is afgeleid van de parameterU. De parameterptris ingesteld opnullptr.
Opmerkingen
Er wordt een fout verzonden als de parameter U is IWeakReference, of niet is afgeleid van IInspectable.
De eerste sjabloon is het formulier dat u in uw code moet gebruiken. De tweede sjabloon is een interne helperspecialisatie; het biedt ondersteuning voor C++-taalfuncties, zoals het auto trefwoord type aftrek.
Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes voorkomen die de WeakRef opzoekt nullptr. Controleer in plaats daarvan ptr op nullptr.
WeakRef::AsIID
Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface-id weer te geven.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parameterwaarden
riid
Een interface-id.
ptr
Wanneer deze bewerking is voltooid, is er een object dat de parameter riidvertegenwoordigt.
Retourwaarde
S_OKals deze bewerking slaagt; anders een HRESULT dat aangeeft waarom de bewerking is mislukt enptris ingesteld opnullptr.S_OKals deze bewerking slaagt, maar het huidigeWeakRefobject al is vrijgegeven. De parameterptris ingesteld opnullptr.S_OKals deze bewerking is geslaagd, maar het huidigeWeakRefobject niet is afgeleid van de parameterriid. De parameterptris ingesteld opnullptr. Zie Opmerkingen voor meer informatie.
Opmerkingen
Er wordt een fout verzonden als de parameter riid niet is afgeleid van IInspectable. Deze fout vervangt de retourwaarde.
De eerste sjabloon is het formulier dat u in uw code moet gebruiken. De tweede sjabloon (niet hier weergegeven, maar gedeclareerd in het headerbestand) is een interne helperspecialisatie die C++ taalfuncties ondersteunt, zoals het auto trefwoord voor typeaftrekking.
Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes voorkomen die de WeakRef opzoekt nullptr. Controleer in plaats daarvan op ptrnullptr.
WeakRef::CopyTo
Wijst een aanwijzer toe aan een interface, indien beschikbaar, aan de opgegeven aanwijzervariabele.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parameterwaarden
U
Wijs een IInspectable interface aan. Er wordt een fout verzonden als U deze niet is afgeleid van IInspectable.
riid
Een interface-id. Er wordt een fout verzonden als riid deze niet is afgeleid van IWeakReference.
ptr
Een dubbel indirect aanwijzer naar IInspectable of IWeakReference.
Retourwaarde
S_OK indien geslaagd; anders een HRESULT dat de fout beschrijft. Zie Opmerkingenvoor meer informatie.
Opmerkingen
Een retourwaarde van S_OK betekent dat deze bewerking is geslaagd, maar geeft niet aan of de zwakke verwijzing is omgezet in een sterke verwijzing. Als S_OK de parameter wordt geretourneerd, test u of deze parameter ptr een sterke verwijzing is. Dat wil gezegd: de parameter ptr is niet gelijk aan nullptr.
Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes vermijden waarmee wordt WeakRefnullptrgecontroleerd. Controleer in plaats daarvan op ptrnullptr.
WeakRef::operator&
Retourneert een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt.
Details::ComPtrRef<WeakRef> operator&() throw()
Retourwaarde
Een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt.
Opmerkingen
WeakRef::operator& is een interne helperoperator die niet bedoeld is om te worden gebruikt in uw code.