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 As
kit de développement logiciel (AsIID
SDK) Windows.CopyTo
Auparavant, après avoir appelé l’une de ces méthodes, vous pouvez vérifier si WeakRef
nullptr
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, vérifiez le pointeur qui a été passé pour nullptr
.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hiérarchie d’héritage
Spécifications
En-tête : client.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 etptr
est défini surnullptr
.S_OK
si cette opération réussit, mais que l’objet actuelWeakRef
a déjà été libéré. Le paramètreptr
prend la valeurnullptr
.S_OK
si cette opération réussit, mais que l’objet actuelWeakRef
n’est pas dérivé du paramètreU
. Le paramètreptr
prend la valeurnullptr
.
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 le mot clé de déduction de auto
type.
À compter du Kit de développement logiciel (SDK) Windows 10, cette méthode ne définit pas l’instance WeakRef
nullptr
si la référence faible n’a pas pu être obtenue. Vous devez donc éviter le code de vérification des erreurs qui vérifie la valeur WeakRef
nullptr
. Au lieu de cela, vérifiez 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 etptr
est défini surnullptr
.S_OK
si cette opération réussit, mais que l’objet actuelWeakRef
a déjà été libéré. Le paramètreptr
prend la valeurnullptr
.S_OK
si cette opération réussit, mais que l’objet actuelWeakRef
n’est pas dérivé du paramètreriid
. Le paramètreptr
prend la valeurnullptr
. (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 le mot clé de déduction de auto
type.
À compter du Kit de développement logiciel (SDK) Windows 10, cette méthode ne définit pas l’instance WeakRef
nullptr
si la référence faible n’a pas pu être obtenue. Vous devez donc éviter le code de vérification des erreurs qui vérifie la valeur WeakRef
nullptr
. Au lieu de cela, vérifiez ptr
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 WeakRef
nullptr
si la référence faible n’a pas pu être obtenue. Vous devez donc éviter la vérification du code qui vérifie le WeakRef
code .nullptr
Au lieu de cela, vérifiez ptr
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.