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.
Crée un type de pointeur intelligent représentant l'interface spécifiée par le paramètre de modèle. ComPtr met à jour automatiquement un décompte de références pour le pointeur d'interface sous-jacent et libère l'interface lorsque le décompte de références atteint zéro.
Syntaxe
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Paramètres
T
Interface que représente ComPtr .
U
Classe à laquelle le courant ComPtr est un ami. (Le modèle qui utilise ce paramètre est protégé).
Notes
ComPtr<> déclare un type qui représente le pointeur d’interface sous-jacent. Permet ComPtr<> de déclarer une variable, puis d’utiliser l’opérateur d’accès membre de flèche (->) pour accéder à une fonction membre d’interface.
Pour plus d’informations sur les pointeurs intelligents, consultez la sous-section « Pointeurs intelligents COM » de l’article Pratiques de codage COM.
Membres
Typedefs publics
| Nom | Description |
|---|---|
InterfaceType |
Synonyme du type spécifié par le paramètre de modèle T . |
Constructeurs publics
| Nom | Description |
|---|---|
ComPtr::ComPtr |
Initialise une nouvelle instance de la classe ComPtr. Les surcharges fournissent des constructeurs par défaut, de copie, de déplacement et de conversion. |
ComPtr::~ComPtr |
Désinitialise une instance de ComPtr. |
Méthodes publiques
| Nom | Description |
|---|---|
ComPtr::As |
Retourne un ComPtr objet qui représente l’interface identifiée par le paramètre de modèle spécifié. |
ComPtr::AsIID |
Retourne un ComPtr objet qui représente l’interface identifiée par l’ID d’interface spécifié. |
ComPtr::AsWeak |
Récupère une référence faible à l’objet actif. |
ComPtr::Attach |
Associe ceci ComPtr au type d’interface spécifié par le paramètre de type de modèle actuel. |
ComPtr::CopyTo |
Copie l’interface actuelle ou spécifiée associée à ce ComPtr pointeur de sortie spécifié. |
ComPtr::Detach |
Dissocie cela ComPtr de l’interface qu’elle représente. |
ComPtr::Get |
Récupère un pointeur vers l’interface associée à ce ComPtr. |
ComPtr::GetAddressOf |
Récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface représentée par ce ComPtr. |
ComPtr::ReleaseAndGetAddressOf |
Libère l’interface associée à cette ComPtr interface, puis récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface qui a été publiée. |
ComPtr::Reset |
Libère l’interface associée à ce ComPtr paramètre et retourne le nouveau nombre de références. |
ComPtr::Swap |
Échange l’interface gérée par le courant ComPtr avec l’interface gérée par l’interface spécifiée ComPtr. |
Méthodes protégées
| Nom | Description |
|---|---|
ComPtr::InternalAddRef |
Incrémente le nombre de références de l’interface associée à ce ComPtr. |
ComPtr::InternalRelease |
Effectue une opération COM Release sur l’interface associée à ce ComPtr. |
Opérateurs publics
| Nom | Description |
|---|---|
ComPtr::operator& |
Récupère l’adresse du fichier actif ComPtr. |
ComPtr::operator-> |
Récupère un pointeur vers le type spécifié par le paramètre de modèle actuel. |
ComPtr::operator= |
Affecte une valeur au fichier actif ComPtr. |
ComPtr::operator== |
Indique si deux objets ComPtr sont égaux. |
ComPtr::operator!= |
Indique si deux ComPtr objets ne sont pas égaux. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Indique si un ComPtr objet gère la durée de vie de l’objet d’une interface. |
Membres de données protégés
| Nom | Description |
|---|---|
ComPtr::ptr_ |
Contient un pointeur vers l’interface associée et gérée par ce ComPtrparamètre . |
Hiérarchie d'héritage
ComPtr
Spécifications
En-tête : client.h
Espace de noms : Microsoft::WRL
ComPtr::~ComPtr
Désinitialise une instance de ComPtr.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Retourne un ComPtr objet qui représente l’interface identifiée par le paramètre de modèle spécifié.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Paramètres
U
Interface à représenter par paramètre p.
p
Objet ComPtr qui représente l’interface spécifiée par le paramètre U. Le paramètre p ne doit pas faire référence à l’objet actuel ComPtr .
Notes
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.
Valeur de retour
S_OK si elle réussit ; sinon, qui HRESULT indique l’erreur.
ComPtr::AsIID
Retourne un ComPtr objet qui représente l’interface identifiée par l’ID d’interface spécifié.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Paramètres
riid
ID d’interface.
p
Si l’objet a une interface dont l’ID est égal riid, un pointeur doublement indirect vers l’interface spécifiée par le riid paramètre. Sinon, pointeur vers IUnknown.
Valeur de retour
S_OK si elle réussit ; sinon, qui HRESULT indique l’erreur.
ComPtr::AsWeak
Récupère une référence faible à l’objet actif.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Paramètres
pWeakRef
Une fois cette opération terminée, pointeur vers un objet de référence faible.
Valeur de retour
S_OK si l'opération réussit. Sinon, une valeur HRESULT indique l'erreur.
ComPtr::Attach
Associe ceci ComPtr au type d’interface spécifié par le paramètre de type de modèle actuel.
void Attach(
_In_opt_ InterfaceType* other
);
Paramètres
other
Type d’interface.
ComPtr::ComPtr
Initialise une nouvelle instance de la classe ComPtr. Les surcharges fournissent des constructeurs par défaut, de copie, de déplacement et de conversion.
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
const ComPtr& other
);
template<class U>
WRL_NOTHROW ComPtr(
const ComPtr<U> &other,
typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
WRL_NOTHROW ComPtr(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr(
_Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
Paramètres
U
Type du paramètre other.
other
Objet de type U.
Valeur de retour
Notes
Le premier constructeur est le constructeur par défaut, qui crée implicitement un objet vide. Le deuxième constructeur spécifie __nullptr, qui crée explicitement un objet vide.
Le troisième constructeur crée un objet à partir de l’objet spécifié par un pointeur. La ComPtr mémoire est maintenant propriétaire de la mémoire pointue et conserve un nombre de références à celui-ci.
Les quatrième et cinquième constructeurs sont des constructeurs de copie. Le cinquième constructeur copie un objet s’il est convertible en type actuel.
Les sixième et septième constructeurs sont des constructeurs de déplacement. Le septième constructeur déplace un objet s’il est convertible en type actuel.
ComPtr::CopyTo
Copie l’interface actuelle ou spécifiée associée à ce ComPtr pointeur vers le pointeur spécifié.
HRESULT CopyTo(
_Deref_out_ InterfaceType** ptr
);
HRESULT CopyTo(
REFIID riid,
_Deref_out_ void** ptr
) const;
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
) const;
Paramètres
U
Un nom de type.
ptr
Une fois cette opération terminée, pointeur vers l’interface demandée.
riid
ID d’interface.
Valeur de retour
S_OK si elle réussit ; sinon, cela HRESULT indique pourquoi l’opération implicite QueryInterface a échoué.
Notes
La première fonction retourne une copie d’un pointeur vers l’interface associée à ce ComPtr. Cette fonction retourne S_OKtoujours .
La deuxième fonction effectue une QueryInterface opération sur l’interface associée à celle-ci ComPtr pour l’interface spécifiée par le riid paramètre.
La troisième fonction effectue une QueryInterface opération sur l’interface associée à celle-ci ComPtr pour l’interface sous-jacente du U paramètre.
ComPtr::Detach
Dissocie cet ComPtr objet de l’interface qu’il représente.
T* Detach();
Valeur de retour
Pointeur vers l’interface qui a été représentée par cet ComPtr objet.
ComPtr::Get
Récupère un pointeur vers l’interface associée à ce ComPtr.
T* Get() const;
Valeur de retour
Pointeur vers l’interface associée à ce ComPtr.
ComPtr::GetAddressOf
Récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface représentée par ce ComPtr.
T* const* GetAddressOf() const;
T** GetAddressOf();
Valeur de retour
Adresse d’une variable.
ComPtr::InternalAddRef
Incrémente le nombre de références de l’interface associée à ce ComPtr.
void InternalAddRef() const;
Notes
Cette méthode est protégée.
ComPtr::InternalRelease
Effectue une opération COM Release sur l’interface associée à ce ComPtr.
unsigned long InternalRelease();
Notes
Cette méthode est protégée.
ComPtr::operator&
Libère l’interface associée à cet ComPtr objet, puis récupère l’adresse de l’objet ComPtr .
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Valeur de retour
Référence faible au courant ComPtr.
Notes
Cette méthode diffère de ComPtr::GetAddressOf celle de cette méthode libère une référence au pointeur d’interface. Utilisez ComPtr::GetAddressOf quand vous avez besoin de l’adresse du pointeur d’interface, mais que vous ne souhaitez pas libérer cette interface.
ComPtr::operator->
Récupère un pointeur vers le type spécifié par le paramètre de modèle actuel.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Valeur de retour
Pointeur vers le type spécifié par le nom de type de modèle actuel.
Notes
Cette fonction d’assistance supprime une surcharge inutile causée par l’utilisation de la macro STDMETHOD. Cette fonction rend les IUnknown types private au lieu de virtual.
ComPtr::operator=
Affecte une valeur au fichier actif ComPtr.
WRL_NOTHROW ComPtr& operator=(
decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
_In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr<U>&& other
);
Paramètres
U
Classe .
other
Pointeur, référence ou référence rvalue à un type ou à un autre ComPtr.
Valeur de retour
Référence à l’actuel ComPtr.
Notes
La première version de cet opérateur affecte une valeur vide au paramètre actif ComPtr.
Dans la deuxième version, si le pointeur d’interface d’affectation n’est pas le même que le pointeur d’interface actuel ComPtr , le deuxième pointeur d’interface est affecté au pointeur actuel ComPtr.
Dans la troisième version, le pointeur d’interface d’affectation est affecté au pointeur actuel ComPtr.
Dans la quatrième version, si le pointeur d’interface de la valeur d’affectation n’est pas le même que le pointeur d’interface actuel ComPtr , le deuxième pointeur d’interface est affecté au pointeur actuel ComPtr.
La cinquième version est un opérateur de copie ; une référence à un ComPtr est affectée à l’actuel ComPtr.
La sixième version est un opérateur de copie qui utilise la sémantique de déplacement ; référence rvalue à un ComPtr type si un type est casté statique, puis affecté à l’actuel ComPtr.
La septième version est un opérateur de copie qui utilise la sémantique de déplacement ; une référence rvalue à un ComPtr type est un cast U statique, puis affectée à l’actuel ComPtr.
ComPtr::operator==
Indique si deux objets ComPtr sont égaux.
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
Paramètres
a
Référence à un objet ComPtr.
b
Référence à un autre ComPtr objet.
Valeur de retour
Le premier opérateur génère true si l’objet a est égal à l’objet b; sinon, false.
Les deuxième et troisième opérateurs produisent true si l’objet a est égal à nullptr; sinon, false.
ComPtr::operator!=
Indique si deux ComPtr objets ne sont pas égaux.
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
Paramètres
a
Référence à un objet ComPtr.
b
Référence à un autre ComPtr objet.
Valeur de retour
Le premier opérateur génère true si l’objet a n’est pas égal à l’objet b; sinon, false.
Les deuxième et troisième opérateurs produisent true si l’objet a n’est pas égal à nullptr; sinon, false.
ComPtr::operator Microsoft::WRL::Details::BoolType
Indique si un ComPtr objet gère la durée de vie de l’objet d’une interface.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Valeur de retour
Si une interface est associée à ce ComPtrparamètre, l’adresse du BoolStruct::Member membre de données ; sinon, nullptr.
ComPtr::ptr_
Contient un pointeur vers l’interface associée et gérée par ce ComPtrparamètre .
InterfaceType *ptr_;
Notes
ptr_ est un membre de données interne et protégé.
ComPtr::ReleaseAndGetAddressOf
Libère l’interface associée à cette ComPtr interface, puis récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface qui a été publiée.
T** ReleaseAndGetAddressOf();
Valeur de retour
Adresse du membre de ptr_ données de ce ComPtr.
ComPtr::Reset
Libère l’interface associée à ce ComPtr paramètre et retourne le nouveau nombre de références.
unsigned long Reset();
Valeur de retour
Nombre de références restantes à l’interface sous-jacente, le cas échéant.
ComPtr::Swap
Échange l’interface gérée par le courant ComPtr avec l’interface gérée par l’interface spécifiée ComPtr.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Paramètres
r
ComPtr.