Share via


Classe WeakRef

Représente une référence faible qui peut être utilisée uniquement par le Windows Runtime, pas par le COM classique. Une référence faible représente un objet qui peut être accessible ou non.

Syntaxe

class WeakRef : public ComPtr<IWeakReference>;

Membres

Constructeurs publics

Nom Description
WeakRef::WeakRef Constructeur Initialise une nouvelle instance de la classe WeakRef.
WeakRef::~WeakRef Destructeur Désinitialise l’instance actuelle de la WeakRef classe.

Méthodes publiques

Nom Description
WeakRef::As Définit le paramètre de pointeur spécifié ComPtr pour représenter l’interface spécifiée.
WeakRef::AsIID Définit le paramètre de pointeur spécifié ComPtr pour représenter l’ID d’interface spécifié.
WeakRef::CopyTo Assigne un pointeur vers une interface, si disponible, à la variable pointeur spécifiée.

Opérateurs publics

Nom Description
WeakRef::operator& Renvoie un ComPtrRef objet qui représente l’objet actuel WeakRef .

Notes

Un WeakRef objet conserve une référence forte, qui est associée à un objet et peut être valide ou non valide. Appelez la ou AsIID() la As() méthode pour obtenir une référence forte. Lorsque la référence forte est valide, elle peut accéder à l’objet associé. Lorsque la référence forte n’est pas valide (nullptr), l’objet associé n’est pas accessible.

Un WeakRef objet est généralement utilisé pour représenter un objet dont l’existence est contrôlée par un thread externe ou une application. Par exemple, construisez un WeakRef objet à partir d’une référence à un objet de fichier. Pendant que le fichier est ouvert, la référence forte est valide, mais si le fichier est fermé, la référence forte devient non valide.

Il existe un changement de comportement dans le Askit de développement logiciel (AsIIDSDK) Windows.CopyTo Auparavant, après avoir appelé l’une de ces méthodes, vous pouvez case activée pour WeakRefnullptr déterminer si une référence forte a été obtenue avec succès, comme dans le code suivant :

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

Le code ci-dessus ne fonctionne pas lors de l’utilisation du Kit de développement logiciel (SDK) Windows 10 (ou version ultérieure). Au lieu de cela, case activée le pointeur passé pour nullptr.

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

Hiérarchie d’héritage

ComPtr
 └ WeakRef

Spécifications

En-têteclient.h:

Espace de noms :Microsoft::WRL

Constructeur WeakRef::WeakRef

Initialise une nouvelle instance de la classe WeakRef.

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

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Paramètres

ptr
Pointeur, référence ou rvalue-reference vers un objet existant qui initialise l’objet actuel WeakRef .

Notes

Le premier constructeur initialise un objet vide WeakRef . Le deuxième constructeur initialise un WeakRef objet à partir d’un pointeur vers l’interface IWeakReference . Le troisième constructeur initialise un WeakRef objet d’une référence à un ComPtr<IWeakReference> objet. Les quatrième et cinquième constructeurs initialisent un WeakRef objet à partir d’un autre WeakRef objet.

WeakRef::~WeakRef Destructeur

Désinitialise l’instance actuelle de la WeakRef classe.

~WeakRef();

WeakRef::As

Définit le paramètre de pointeur spécifié ComPtr pour représenter l’interface spécifiée.

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

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

Paramètres

U
ID d’interface.

ptr
Une fois cette opération terminée, objet qui représente le paramètre U.

Valeur retournée

  • S_OK si cette opération réussit ; sinon, un HRESULT qui indique la raison de l’échec de l’opération et ptr est défini sur nullptr.

  • S_OK si cette opération réussit, mais que l’objet actuel WeakRef a déjà été libéré. Le paramètre ptr prend la valeur nullptr.

  • S_OK si cette opération réussit, mais que l’objet actuel WeakRef n’est pas dérivé du paramètre U. Le paramètre ptr prend la valeur nullptr.

Notes

Une erreur est émise si le paramètre U est IWeakReference, ou n’est pas dérivé de IInspectable.

Le premier modèle est le formulaire que vous devez utiliser dans votre code. Le deuxième modèle est une spécialisation interne, d’assistance ; il prend en charge les fonctionnalités de langage C++ telles que la déduction de auto type mot clé.

À compter du Kit de développement logiciel (SDK) Windows 10, cette méthode ne définit pas l’instance WeakRefnullptr si la référence faible n’a pas pu être obtenue. Vous devez donc éviter le code d’erreur case activée ing qui case activée le WeakRef .nullptr Au lieu de cela, case activée ptr pour nullptr.

WeakRef::AsIID

Définit le paramètre de pointeur spécifié ComPtr pour représenter l’ID d’interface spécifié.

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

Paramètres

riid
ID d’interface.

ptr
Quand cette opération est terminée, objet qui représente le paramètre riid.

Valeur retournée

  • S_OK si cette opération réussit ; sinon, un HRESULT qui indique la raison de l’échec de l’opération et ptr est défini sur nullptr.

  • S_OK si cette opération réussit, mais que l’objet actuel WeakRef a déjà été libéré. Le paramètre ptr prend la valeur nullptr.

  • S_OK si cette opération réussit, mais que l’objet actuel WeakRef n’est pas dérivé du paramètre riid. Le paramètre ptr prend la valeur nullptr. (Pour plus d’informations, consultez la section Notes.)

Notes

Une erreur est émise si le paramètre riid n’est pas dérivé de IInspectable. Cette erreur remplace la valeur de retour.

Le premier modèle est le formulaire que vous devez utiliser dans votre code. Le deuxième modèle (non illustré ici, mais déclaré dans le fichier d’en-tête) est une spécialisation interne d’assistance qui prend en charge les fonctionnalités de langage C++ telles que la auto déduction de type mot clé.

À compter du Kit de développement logiciel (SDK) Windows 10, cette méthode ne définit pas l’instance WeakRefnullptr si la référence faible n’a pas pu être obtenue. Vous devez donc éviter le code d’erreur case activée ing qui case activée le WeakRef .nullptr Au lieu de ptr cela, case activée pour nullptr.

WeakRef::CopyTo

Assigne un pointeur vers une interface, si disponible, à la variable pointeur spécifiée.

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

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

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Paramètres

U
Pointeur d’une IInspectable interface. Une erreur est émise si U elle n’est pas dérivée de IInspectable.

riid
ID d’interface. Une erreur est émise si riid elle n’est pas dérivée de IWeakReference.

ptr
Pointeur doublement indirect vers IInspectable ou IWeakReference.

Valeur retournée

S_OK si elle réussit ; sinon, HRESULT qui décrit l’échec. Pour plus d’informations, consultez Notes.

Notes

Une valeur de retour signifie S_OK que cette opération a réussi, mais n’indique pas si la référence faible a été résolue en référence forte. Si S_OK elle est retournée, testez ce paramètre ptr comme une référence forte ; autrement dit, le paramètre ptr n’est pas égal à nullptr.

À compter du Kit de développement logiciel (SDK) Windows 10, cette méthode ne définit pas l’instance WeakRefnullptr si la référence faible n’a pas pu être obtenue. Vous devez donc éviter l’erreur case activée code qui case activée le WeakRef pour nullptr. Au lieu de ptr cela, case activée pour nullptr.

WeakRef::operator&

Renvoie un ComPtrRef objet qui représente l’objet actuel WeakRef .

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

Valeur retournée

Objet ComPtrRef qui représente l’objet actuel WeakRef .

Notes

WeakRef::operator& est un opérateur d’assistance interne qui n’est pas destiné à être utilisé dans votre code.