Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Representa uma referência fraca que pode ser usada apenas pelo Tempo de Execução do Windows, não pela COM clássica. Uma referência fraca representa um objeto que pode ou não estar acessível.
Sintaxe
class WeakRef : public ComPtr<IWeakReference>;
Membros
Construtores públicos
| Nome | Descrição |
|---|---|
WeakRef::WeakRef construtor |
Inicializa uma nova instância da classe WeakRef. |
WeakRef::~WeakRef destruidor |
Desinicializa a instância atual da WeakRef classe. |
Métodos públicos
| Nome | Descrição |
|---|---|
WeakRef::As |
Define o parâmetro de ponteiro especificado ComPtr para representar a interface especificada. |
WeakRef::AsIID |
Define o parâmetro de ponteiro especificado ComPtr para representar o ID de interface especificado. |
WeakRef::CopyTo |
Atribui um ponteiro a uma interface, se disponível, à variável de ponteiro especificada. |
Operadores públicos
| Nome | Descrição |
|---|---|
WeakRef::operator& |
Retorna um ComPtrRef objeto que representa o objeto atual WeakRef . |
Observações
Um WeakRef objeto mantém uma referência forte, que está associada a um objeto, e pode ser válida ou inválida. Chame o As() método ou AsIID() para obter uma referência forte. Quando a referência forte é válida, ela pode acessar o objeto associado. Quando a referência forte é inválida (nullptr), o objeto associado fica inacessível.
Um WeakRef objeto é normalmente usado para representar um objeto cuja existência é controlada por um thread ou aplicativo externo. Por exemplo, construa um WeakRef objeto a partir de uma referência a um objeto de arquivo. Enquanto o arquivo estiver aberto, a referência forte é válida. Mas se o arquivo for fechado, a referência forte se tornará inválida.
Há uma alteração de comportamento nos Asmétodos , AsIIDe CopyTo no SDK do Windows. Anteriormente, depois de chamar qualquer um desses métodos, você poderia verificar o WeakRef para nullptr determinar se uma referência forte foi obtida com êxito, como no código a seguir:
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!");
}
O código acima não funciona ao usar o SDK do Windows 10 (ou posterior). Em vez disso, verifique o ponteiro que foi passado para nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarquia de herança
Requerimentos
Cabeçalho:client.h
Espaço de nomes: Microsoft::WRL
WeakRef::WeakRef construtor
Inicializa uma nova instância da classe WeakRef.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parâmetros
ptr
Um ponteiro, referência ou referência de valor para um objeto existente que inicializa o objeto atual WeakRef .
Observações
O primeiro construtor inicializa um objeto vazio WeakRef . O segundo construtor inicializa um WeakRef objeto de um ponteiro para a IWeakReference interface. O terceiro construtor inicializa um WeakRef objeto a partir de uma referência a um ComPtr<IWeakReference> objeto. O quarto e quinto construtores inicializam um WeakRef objeto de outro WeakRef objeto.
WeakRef::~WeakRef destruidor
Desinicializa a instância atual da WeakRef classe.
~WeakRef();
WeakRef::As
Define o parâmetro de ponteiro especificado ComPtr para representar a interface especificada.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parâmetros
U
Um ID de interface.
ptr
Quando esta operação for concluída, um objeto que representa o parâmetro U.
Valor de retorno
S_OKse esta operação for bem sucedida; caso contrário, um HRESULT que indica o motivo da falha da operação eptré definido comonullptr.S_OKse essa operação for bem-sucedida, mas o objeto atualWeakRefjá tiver sido liberado. O parâmetroptré definido comonullptr.S_OKse esta operação for bem-sucedida, mas o objeto atualWeakRefnão for derivado do parâmetroU. O parâmetroptré definido comonullptr.
Observações
Um erro é emitido se o parâmetro U for IWeakReference, ou não for derivado de IInspectable.
O primeiro modelo é o formulário que você deve usar em seu código. O segundo modelo é uma especialização interna, auxiliar; ele suporta recursos de linguagem C++, como a auto palavra-chave de dedução de tipo.
A partir do SDK do Windows 10, esse método não define a instância como nullptr se a referência fraca não puder ser obtida, portanto, você deve evitar o WeakRef código de verificação de erros que verifica o .nullptrWeakRef Em vez disso, verifique ptr para nullptr.
WeakRef::AsIID
Define o parâmetro de ponteiro especificado ComPtr para representar o ID de interface especificado.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parâmetros
riid
Um ID de interface.
ptr
Quando esta operação for concluída, um objeto que representa o parâmetro riid.
Valor de retorno
S_OKse esta operação for bem sucedida; caso contrário, um HRESULT que indica o motivo da falha da operação eptré definido comonullptr.S_OKse essa operação for bem-sucedida, mas o objeto atualWeakRefjá tiver sido liberado. O parâmetroptré definido comonullptr.S_OKse esta operação for bem-sucedida, mas o objeto atualWeakRefnão for derivado do parâmetroriid. O parâmetroptré definido comonullptr. Para obter mais informações, consulte Observações.
Observações
Um erro será emitido se o parâmetro riid não for derivado de IInspectable. Este erro substitui o valor de retorno.
O primeiro modelo é o formulário que você deve usar em seu código. O segundo modelo (não mostrado aqui, mas declarado no arquivo de cabeçalho) é uma especialização interna auxiliar que suporta recursos da linguagem C++, como a auto palavra-chave de dedução de tipo.
A partir do SDK do Windows 10, esse método não define a instância como nullptr se a referência fraca não puder ser obtida, portanto, você deve evitar o WeakRef código de verificação de erros que verifica o .nullptrWeakRef Em vez disso, verifique se ptr há nullptr.
WeakRef::CopyTo
Atribui um ponteiro a uma interface, se disponível, à variável de ponteiro especificada.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parâmetros
U
Ponteiro uma IInspectable interface. Um erro é emitido se U não for derivado de IInspectable.
riid
Um ID de interface. Um erro é emitido se riid não for derivado de IWeakReference.
ptr
Um ponteiro duplamente indireto para IInspectable ou IWeakReference.
Valor de retorno
S_OK se for bem sucedido; caso contrário, um HRESULT que descreva a falha. Para obter mais informações, veja Observações.
Observações
Um valor de retorno significa S_OK que essa operação foi bem-sucedida, mas não indica se a referência fraca foi resolvida para uma referência forte. Se S_OK for retornado, teste esse parâmetro ptr é uma referência forte, ou seja, parâmetro ptr não é igual a nullptr.
A partir do SDK do Windows 10, esse método não define a instância como nullptr se a referência fraca não puder ser obtida, portanto, você deve evitar o WeakRef código de verificação de erros que verifica o .nullptrWeakRef Em vez disso, verifique se ptr há nullptr.
WeakRef::operator&
Retorna um ComPtrRef objeto que representa o objeto atual WeakRef .
Details::ComPtrRef<WeakRef> operator&() throw()
Valor de retorno
Um ComPtrRef objeto que representa o objeto atual WeakRef .
Observações
WeakRef::operator& é um operador auxiliar interno que não se destina a ser usado em seu código.