Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Classe
Rappresenta un riferimento debole che può essere usato solamente da Windows Runtime, non da COM classico. Un riferimento debole rappresenta un oggetto che può o non può essere accessibile.
Sintassi
class WeakRef : public ComPtr<IWeakReference>;
Membri
Costruttori pubblici
| Nome | Descrizione |
|---|---|
WeakRef::WeakRef costruttore |
Inizializza una nuova istanza della classe WeakRef. |
WeakRef::~WeakRef Distruttore |
Deinitialize l'istanza corrente della WeakRef classe . |
Metodi pubblici
| Nome | Descrizione |
|---|---|
WeakRef::As |
Imposta il parametro del puntatore specificato ComPtr per rappresentare l'interfaccia specificata. |
WeakRef::AsIID |
Imposta il parametro del puntatore specificato ComPtr per rappresentare l'ID di interfaccia specificato. |
WeakRef::CopyTo |
Assegna un puntatore a un'interfaccia, se disponibile, per la variabile del puntatore specificato. |
Operatori pubblici
| Nome | Descrizione |
|---|---|
WeakRef::operator& |
Restituisce un ComPtrRef oggetto che rappresenta l'oggetto corrente WeakRef . |
Osservazioni:
Un WeakRef oggetto mantiene un riferimento sicuro, associato a un oggetto e può essere valido o non valido. Chiamare il As() metodo o AsIID() per ottenere un riferimento sicuro. Quando il riferimento sicuro è valido, può accedere all'oggetto associato. Quando il riferimento sicuro non è valido (nullptr), l'oggetto associato è inaccessibile.
Un WeakRef oggetto viene in genere utilizzato per rappresentare un oggetto la cui esistenza è controllata da un thread esterno o da un'applicazione. Ad esempio, costruire un WeakRef oggetto da un riferimento a un oggetto file. Finché il file rimane aperto, il riferimento sicuro è valido. Ma se il file viene chiuso, il riferimento sicuro non è più valido.
Esiste una modifica del comportamento nei Asmetodi , AsIIDe CopyTo in Windows SDK. In precedenza, dopo aver chiamato uno di questi metodi, è possibile verificare se WeakRefnullptr un riferimento sicuro è stato ottenuto correttamente, come nel codice seguente:
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!");
}
Il codice precedente non funziona quando si usa Windows 10 SDK (o versione successiva). Controllare invece il puntatore passato per nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Gerarchia di ereditarietà
Requisiti
Intestazione:client.h
Spazio dei nomi:Microsoft::WRL
Costruttore WeakRef::WeakRef
Inizializza una nuova istanza della classe WeakRef.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parametri
ptr
Puntatore, riferimento o riferimento rvalue a un oggetto esistente che inizializza l'oggetto corrente WeakRef .
Osservazioni:
Il primo costruttore inizializza un oggetto vuoto WeakRef . Il secondo costruttore inizializza un WeakRef oggetto da un puntatore all'interfaccia IWeakReference . Il terzo costruttore inizializza un WeakRef oggetto da un riferimento a un ComPtr<IWeakReference> oggetto . Il quarto e il quinto costruttore inizializzano un WeakRef oggetto da un altro WeakRef oggetto.
WeakRef::~WeakRef Distruttore
Deinitialize l'istanza corrente della WeakRef classe .
~WeakRef();
WeakRef::As
Imposta il parametro del puntatore specificato ComPtr per rappresentare l'interfaccia specificata.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parametri
U
ID di interfaccia.
ptr
Al termine di questa operazione, un oggetto che rappresenta il parametro U.
Valore restituito
S_OKse l'operazione ha esito positivo; in caso contrario, hresult che indica il motivo per cui l'operazione non è riuscita eptrè impostata sunullptr.S_OKse l'operazione ha esito positivo, ma l'oggetto correnteWeakRefè già stato rilasciato. Il parametroptrviene impostato sunullptr.S_OKse l'operazione ha esito positivo, ma l'oggetto correnteWeakRefnon è derivato dal parametroU. Il parametroptrviene impostato sunullptr.
Osservazioni:
Viene generato un errore se il parametro U è IWeakReferenceo non è derivato da IInspectable.
Il primo modello è il form da usare nel codice. Il secondo modello è una specializzazione interna e helper; supporta funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto tipo.
A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, pertanto è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Controllare invece ptr per nullptr.
WeakRef::AsIID
Imposta il parametro del puntatore specificato ComPtr per rappresentare l'ID di interfaccia specificato.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parametri
riid
ID di interfaccia.
ptr
Al termine dell'operazione, un oggetto che rappresenta il parametro riid.
Valore restituito
S_OKse l'operazione ha esito positivo; in caso contrario, hresult che indica il motivo per cui l'operazione non è riuscita eptrè impostata sunullptr.S_OKse l'operazione ha esito positivo, ma l'oggetto correnteWeakRefè già stato rilasciato. Il parametroptrviene impostato sunullptr.S_OKse l'operazione ha esito positivo, ma l'oggetto correnteWeakRefnon è derivato dal parametroriid. Il parametroptrviene impostato sunullptr. Per altre informazioni, vedere Osservazioni.
Osservazioni:
Viene generato un errore se il parametro riid non è derivato da IInspectable. Questo errore sostituisce il valore restituito.
Il primo modello è il form da usare nel codice. Il secondo modello (non illustrato qui, ma dichiarato nel file di intestazione) è una specializzazione helper interna che supporta le funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto tipo.
A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, pertanto è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Cercare invece ptrnullptr.
WeakRef::CopyTo
Assegna un puntatore a un'interfaccia, se disponibile, per la variabile del puntatore specificato.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parametri
U
Puntatore a un'interfaccia IInspectable . Viene generato un errore se U non è derivato da IInspectable.
riid
ID di interfaccia. Viene generato un errore se riid non è derivato da IWeakReference.
ptr
Puntatore indiretto doubly a IInspectable o IWeakReference.
Valore restituito
S_OK se ha esito positivo; in caso contrario, hresult che descrive l'errore. Per altre informazioni, vedere Note.
Osservazioni:
Un valore restituito indica S_OK che questa operazione è riuscita, ma non indica se il riferimento debole è stato risolto in un riferimento sicuro. Se S_OK viene restituito, verificare che il parametro ptr sia un riferimento sicuro, ovvero il parametro ptr non è uguale a nullptr.
A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, quindi è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Cercare invece ptrnullptr.
WeakRef::operator&
Restituisce un ComPtrRef oggetto che rappresenta l'oggetto corrente WeakRef .
Details::ComPtrRef<WeakRef> operator&() throw()
Valore restituito
Oggetto ComPtrRef che rappresenta l'oggetto corrente WeakRef .
Osservazioni:
WeakRef::operator& è un operatore helper interno che non deve essere usato nel codice.