Partilhar via


WeakRef classe

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

ComPtr
 └ WeakRef

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_OK se esta operação for bem sucedida; caso contrário, um HRESULT que indica o motivo da falha da operação e ptr é definido como nullptr.

  • S_OK se essa operação for bem-sucedida, mas o objeto atual WeakRef já tiver sido liberado. O parâmetro ptr é definido como nullptr.

  • S_OK se esta operação for bem-sucedida, mas o objeto atual WeakRef não for derivado do parâmetro U. O parâmetro ptr é definido como nullptr.

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_OK se esta operação for bem sucedida; caso contrário, um HRESULT que indica o motivo da falha da operação e ptr é definido como nullptr.

  • S_OK se essa operação for bem-sucedida, mas o objeto atual WeakRef já tiver sido liberado. O parâmetro ptr é definido como nullptr.

  • S_OK se esta operação for bem-sucedida, mas o objeto atual WeakRef não for derivado do parâmetro riid. O parâmetro ptr é definido como nullptr. 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 ptrnullptr.

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 ptrnullptr.

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.