Condividi tramite


ComPtr (classe)

Crea un tipo di puntatore intelligente che rappresenta l'interfaccia specificata dal parametro di modello. ComPtr mantiene automaticamente un conteggio dei riferimenti per un puntatore di interfaccia sottostante e rilascia l'interfaccia quando il conteggio dei riferimenti va a zero.

Sintassi

template <typename T>
class ComPtr;

template<class U>
friend class ComPtr;

Parametri

T
Interfaccia rappresentata dall'oggetto ComPtr .

U
Classe a cui l'oggetto corrente ComPtr è un amico. (Il modello che usa questo parametro è protetto.)

Osservazioni:

ComPtr<> dichiara un tipo che rappresenta il puntatore all'interfaccia sottostante. Usare ComPtr<> per dichiarare una variabile e quindi usare l'operatore arrow member-access (->) per accedere a una funzione membro dell'interfaccia.

Per altre informazioni sui puntatori intelligenti, vedere la sottosezione "Puntatori intelligenti COM" dell'articolo Procedure di codifica COM.

Membri

Typedef pubblici

Nome Descrizione
InterfaceType Un sinonimo per il tipo specificato dal parametro di modello T .

Costruttori pubblici

Nome Descrizione
ComPtr::ComPtr Inizializza una nuova istanza della classe ComPtr. Gli overload forniscono costruttori predefiniti, di copia, di spostamento e di conversione.
ComPtr::~ComPtr Deinitialize un'istanza di ComPtr.

Metodi pubblici

Nome Descrizione
ComPtr::As Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dal parametro di modello specificato.
ComPtr::AsIID Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dall'ID interfaccia specificato.
ComPtr::AsWeak Restituisce un riferimento debole all'oggetto corrente.
ComPtr::Attach Associa questo ComPtr oggetto al tipo di interfaccia specificato dal parametro del tipo di modello corrente.
ComPtr::CopyTo Copia l'interfaccia corrente o specificata associata al ComPtr puntatore di output specificato.
ComPtr::Detach Disassocia questo ComPtr oggetto dall'interfaccia rappresentata.
ComPtr::Get Recupera un puntatore all'interfaccia associata all'oggetto ComPtr.
ComPtr::GetAddressOf Recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rappresentata da questo ComPtroggetto .
ComPtr::ReleaseAndGetAddressOf Rilascia l'interfaccia associata a questo ComPtr e quindi recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rilasciata.
ComPtr::Reset Rilascia l'interfaccia associata a questo ComPtr e restituisce il nuovo conteggio dei riferimenti.
ComPtr::Swap Scambia l'interfaccia gestita dall'oggetto corrente ComPtr con l'interfaccia gestita dall'oggetto specificato ComPtr.

Metodi protetti

Nome Descrizione
ComPtr::InternalAddRef Incrementa il conteggio dei riferimenti dell'interfaccia associata a questo ComPtroggetto .
ComPtr::InternalRelease Esegue un'operazione COM Release sull'interfaccia associata a questo ComPtroggetto .

Operatori pubblici

Nome Descrizione
ComPtr::operator& Recupera l'indirizzo dell'oggetto corrente ComPtr.
ComPtr::operator-> Recupera un puntatore al tipo specificato dal parametro di modello corrente.
ComPtr::operator= Assegna un valore all'oggetto corrente ComPtr.
ComPtr::operator== Indica se due oggetti ComPtr sono uguali.
ComPtr::operator!= Indica se due ComPtr oggetti non sono uguali.
ComPtr::operator Microsoft::WRL::Details::BoolType Indica se un oggetto ComPtr gestisce la durata dell'oggetto di un'interfaccia.

Membri dati protetti

Nome Descrizione
ComPtr::ptr_ Contiene un puntatore all'interfaccia associata e gestita da questo ComPtroggetto .

Gerarchia di ereditarietà

ComPtr

Requisiti

Intestazione: client.h

Spazio dei nomi: Microsoft::WRL

ComPtr::~ComPtr

Deinitialize un'istanza di ComPtr.

WRL_NOTHROW ~ComPtr();

ComPtr::As

Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dal parametro di modello specificato.

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

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

Parametri

U
Interfaccia da rappresentare con il parametro p.

p
Oggetto ComPtr che rappresenta l'interfaccia specificata dal parametro U. Il parametro p non deve fare riferimento all'oggetto corrente ComPtr .

Osservazioni:

Il primo modello è il form da usare nel codice. Il secondo modello è una specializzazione interna helper. Supporta funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto tipo.

Valore restituito

S_OK se ha esito positivo; in caso contrario, che HRESULT indica l'errore.

ComPtr::AsIID

Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dall'ID interfaccia specificato.

WRL_NOTHROW HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IUnknown>* p
) const;

Parametri

riid
ID di interfaccia.

p
Se l'oggetto ha un'interfaccia il cui ID è uguale riida , un puntatore indiretto doubly all'interfaccia specificata dal riid parametro . In caso contrario, un puntatore a IUnknown.

Valore restituito

S_OK se ha esito positivo; in caso contrario, che HRESULT indica l'errore.

ComPtr::AsWeak

Restituisce un riferimento debole all'oggetto corrente.

HRESULT AsWeak(
   _Out_ WeakRef* pWeakRef
);

Parametri

pWeakRef
Al termine di questa operazione, un puntatore a un oggetto riferimento debole.

Valore restituito

S_OK se riesce; in caso contrario, HRESULT indica un errore.

ComPtr::Attach

Associa questo ComPtr oggetto al tipo di interfaccia specificato dal parametro del tipo di modello corrente.

void Attach(
   _In_opt_ InterfaceType* other
);

Parametri

other
Tipo di interfaccia.

ComPtr::ComPtr

Inizializza una nuova istanza della classe ComPtr. Gli overload forniscono costruttori predefiniti, di copia, di spostamento e di conversione.

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 *>
);

Parametri

U
Tipo del parametro other.

other
Oggetto di tipo U.

Valore restituito

Osservazioni:

Il primo costruttore è il costruttore predefinito, che crea in modo implicito un oggetto vuoto. Il secondo costruttore specifica __nullptr, che crea in modo esplicito un oggetto vuoto.

Il terzo costruttore crea un oggetto dall'oggetto specificato da un puntatore. È ComPtr ora proprietario della memoria a punta e mantiene un conteggio dei riferimenti.

Il quarto e il quinto costruttore sono costruttori di copia. Il quinto costruttore copia un oggetto se è convertibile nel tipo corrente.

Il sesto e il settimo costruttore sono costruttori di spostamento. Il settimo costruttore sposta un oggetto se è convertibile nel tipo corrente.

ComPtr::CopyTo

Copia l'interfaccia corrente o specificata associata al ComPtr puntatore specificato.

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;

Parametri

U
Un nome di tipo.

ptr
Al termine di questa operazione, un puntatore all'interfaccia richiesta.

riid
ID di interfaccia.

Valore restituito

S_OK se ha esito positivo; in caso contrario, un oggetto HRESULT che indica il motivo per cui l'operazione implicita QueryInterface non è riuscita.

Osservazioni:

La prima funzione restituisce una copia di un puntatore all'interfaccia associata a questo ComPtroggetto . Questa funzione restituisce S_OKsempre .

La seconda funzione esegue un'operazione QueryInterface sull'interfaccia associata a questa ComPtr per l'interfaccia specificata dal riid parametro .

La terza funzione esegue un'operazione QueryInterface sull'interfaccia associata a questa ComPtr per l'interfaccia sottostante del U parametro .

ComPtr::Detach

Rimuove l'associazione di questo oggetto ComPtr dall'interfaccia da esso rappresentata.

T* Detach();

Valore restituito

Puntatore all'interfaccia rappresentata da questo oggetto ComPtr.

ComPtr::Get

Recupera un puntatore all'interfaccia associata all'oggetto ComPtr.

T* Get() const;

Valore restituito

Puntatore all'interfaccia associata a questo ComPtroggetto .

ComPtr::GetAddressOf

Recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rappresentata da questo ComPtroggetto .

T* const* GetAddressOf() const;
T** GetAddressOf();

Valore restituito

Indirizzo di una variabile.

ComPtr::InternalAddRef

Incrementa il conteggio dei riferimenti dell'interfaccia associata a questo ComPtroggetto .

void InternalAddRef() const;

Osservazioni:

Questo metodo è protetto.

ComPtr::InternalRelease

Esegue un'operazione COM Release sull'interfaccia associata a questo ComPtroggetto .

unsigned long InternalRelease();

Osservazioni:

Questo metodo è protetto.

ComPtr::operator&

Rilascia l'interfaccia associata a questo ComPtr oggetto e quindi recupera l'indirizzo dell'oggetto ComPtr .

Details::ComPtrRef<WeakRef> operator&()

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

Valore restituito

Riferimento debole all'oggetto corrente ComPtr.

Osservazioni:

Questo metodo differisce da in ComPtr::GetAddressOf quanto questo metodo rilascia un riferimento al puntatore di interfaccia. Usare ComPtr::GetAddressOf quando è necessario l'indirizzo del puntatore all'interfaccia, ma non si vuole rilasciare tale interfaccia.

ComPtr::operator->

Recupera un puntatore al tipo specificato dal parametro di modello corrente.

WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;

Valore restituito

Puntatore al tipo specificato dal nome del tipo di modello corrente.

Osservazioni:

Questa funzione helper rimuove il sovraccarico non necessario causato dall'utilizzo della macro STDMETHOD. Questa funzione rende IUnknown i tipi private anziché virtual.

ComPtr::operator=

Assegna un valore all'oggetto corrente 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
);

Parametri

U
Classe .

other
Riferimento puntatore, riferimento o rvalue a un tipo o a un altro ComPtroggetto .

Valore restituito

Riferimento all'oggetto corrente ComPtr.

Osservazioni:

La prima versione di questo operatore assegna un valore vuoto all'oggetto corrente ComPtr.

Nella seconda versione, se il puntatore all'interfaccia di assegnazione non è uguale al puntatore di interfaccia corrente ComPtr , il secondo puntatore di interfaccia viene assegnato all'oggetto corrente ComPtr.

Nella terza versione il puntatore all'interfaccia di assegnazione viene assegnato all'oggetto corrente ComPtr.

Nella quarta versione, se il puntatore dell'interfaccia del valore di assegnazione non è uguale al puntatore di interfaccia corrente ComPtr , il secondo puntatore dell'interfaccia viene assegnato all'oggetto corrente ComPtr.

La quinta versione è un operatore di copia; Un riferimento a un ComPtr oggetto viene assegnato all'oggetto corrente ComPtr.

La sesta versione è un operatore di copia che usa la semantica di spostamento; riferimento rvalue a un ComPtr oggetto se un tipo è di tipo statico e quindi assegnato all'oggetto corrente ComPtr.

La settima versione è un operatore di copia che usa la semantica di spostamento; Un riferimento rvalue a un ComPtr di tipo U viene quindi eseguito il cast statico e assegnato all'oggetto corrente ComPtr.

ComPtr::operator==

Indica se due oggetti ComPtr sono uguali.

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
);

Parametri

a
Riferimento a un oggetto ComPtr.

b
Riferimento a un altro ComPtr oggetto.

Valore restituito

Il primo operatore restituisce true se l'oggetto a è uguale all'oggetto b; in caso contrario, false.

Il secondo e il terzo operatore producono true se l'oggetto a è uguale a nullptr; in caso contrario, false.

ComPtr::operator!=

Indica se due ComPtr oggetti non sono uguali.

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
);

Parametri

a
Riferimento a un oggetto ComPtr.

b
Riferimento a un altro ComPtr oggetto.

Valore restituito

Il primo operatore restituisce true se l'oggetto a non è uguale all'oggetto b; in caso contrario, false.

Il secondo e il terzo operatore producono true se l'oggetto a non è uguale a nullptr; in caso contrario, false.

ComPtr::operator Microsoft::WRL::Details::BoolType

Indica se un oggetto ComPtr gestisce la durata dell'oggetto di un'interfaccia.

WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;

Valore restituito

Se un'interfaccia è associata a , ComPtrl'indirizzo del BoolStruct::Member membro dati; in caso contrario, nullptr.

ComPtr::ptr_

Contiene un puntatore all'interfaccia associata e gestita da questo ComPtroggetto .

InterfaceType *ptr_;

Osservazioni:

ptr_ è un membro dati interno e protetto.

ComPtr::ReleaseAndGetAddressOf

Rilascia l'interfaccia associata a questo ComPtr e quindi recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rilasciata.

T** ReleaseAndGetAddressOf();

Valore restituito

Indirizzo del ptr_ membro dati di questo ComPtroggetto .

ComPtr::Reset

Rilascia l'interfaccia associata a questo ComPtr e restituisce il nuovo conteggio dei riferimenti.

unsigned long Reset();

Valore restituito

Numero di riferimenti rimanenti all'interfaccia sottostante, se presenti.

ComPtr::Swap

Scambia l'interfaccia gestita dall'oggetto corrente ComPtr con l'interfaccia gestita dall'oggetto specificato ComPtr.

void Swap(
   _Inout_ ComPtr&& r
);

void Swap(
   _Inout_ ComPtr& r
);

Parametri

r
Un oggetto ComPtr.