Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Classe
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 As() la AsIID() 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 vérifier si WeakRefnullptr 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_OKsi cette opération réussit ; sinon, un HRESULT qui indique la raison de l’échec de l’opération etptrest défini surnullptr.S_OKsi cette opération réussit, mais que l’objet actuelWeakRefa déjà été libéré. Le paramètreptrprend la valeurnullptr.S_OKsi cette opération réussit, mais que l’objet actuelWeakRefn’est pas dérivé du paramètreU. Le paramètreptrprend 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 WeakRefnullptr 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 WeakRefnullptr. 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_OKsi cette opération réussit ; sinon, un HRESULT qui indique la raison de l’échec de l’opération etptrest défini surnullptr.S_OKsi cette opération réussit, mais que l’objet actuelWeakRefa déjà été libéré. Le paramètreptrprend la valeurnullptr.S_OKsi cette opération réussit, mais que l’objet actuelWeakRefn’est pas dérivé du paramètreriid. Le paramètreptrprend 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 WeakRefnullptr 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 WeakRefnullptr. Au lieu de cela, vérifiez ptrnullptr.
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 la vérification du code qui vérifie le WeakRef code .nullptr Au lieu de cela, vérifiez ptrnullptr.
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.