Palavra-chave __unhook
Dissocia um método de manipulador de um evento.
Observação
Os atributos de evento em C++ nativo são incompatíveis com o C++ Standard. Eles não são compilados quando você especifica o modo de conformidade /permissive-
.
Sintaxe
long __unhook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __unhook(
interface,
source
);
long __unhook(
source
);
Parâmetros
&SourceClass::EventMethod
Um ponteiro para o método de evento do qual você desconecta o método do manipulador de eventos:
Eventos nativos do C++:
SourceClass
é a classe da origem do evento eEventMethod
é o evento.Eventos COM:
SourceClass
é a interface da origem do evento eEventMethod
é um dos métodos.Eventos gerenciados:
SourceClass
é a classe da origem do evento eEventMethod
é o evento.
interface
O nome da interface que o gancho foi removido do receptor, apenas para os receptores de evento COM nos quais o parâmetro layout_dependent do atributo event_receiver
é true
.
source
Um ponteiro para uma instância da origem do evento. Dependendo do código type
especificado em event_receiver
, a origem pode ser um desses tipos:
Um ponteiro nativo do objeto de origem do evento.
Um ponteiro baseado em
IUnknown
(origem COM).Um ponteiro gerenciado do objeto (para eventos gerenciados).
&ReceiverClass::HandlerMethod
Um ponteiro para o método do manipulador de eventos para ter o gancho removido de um evento. O manipulador é especificado como um método de uma classe ou uma referência a ela. Se você não especificar o nome da classe, __unhook
assumirá a classe como sendo a chamada.
Eventos nativos de C++:
ReceiverClass
é a classe do receptor de eventos eHandlerMethod
é o manipulador.Eventos COM:
ReceiverClass
é a interface do receptor de eventos eHandlerMethod
é um dos manipuladores.Eventos gerenciados:
ReceiverClass
é a classe do receptor de eventos eHandlerMethod
é o manipulador.
receiver
(opcional) Um ponteiro para uma instância da classe do receptor de eventos. Se você não especificar um receptor, o padrão será a classe ou a estrutura receptora na qual __unhook
é chamado.
Uso
Pode ser o uso em qualquer escopo da função, incluindo main
, fora da classe do receptor de eventos.
Comentários
Use a função intrínseca __unhook
em um receptor de eventos para desassociar ou "remover o gancho" no método de manipulador de um método de evento.
Há três formas de __unhook
. Você pode usar o primeiro formulário (quatro argumento) na maioria dos casos. Você pode usar o segundo formulário (dois argumentos) de __unhook
apenas para um receptor de eventos COM. Isso remove o gancho de toda a interface de eventos. Você pode usar o terceiro formato (um argumento) para desenganchar todos os representantes da origem especificada.
Um valor de retorno diferente de zero indica que ocorreu um erro (eventos gerenciados lançarão uma exceção).
Se você chamar __unhook
em um evento e o manipulador de eventos que ainda não estão enganchados, a chamada não terá nenhum efeito.
Em tempo de compilação, o compilador verifica se o evento existe e faz a verificação do tipo de parâmetro com o manipulador especificado.
Você pode chamar __hook
e __unhook
fora do receptor do evento, exceto para eventos COM.
Uma alternativa ao uso de __unhook
é usar o operador -=.
Para obter informações sobre a codificação gerenciada de eventos na nova sintaxe, consulte evento.
Observação
Uma classe ou um struct modelo não podem conter eventos.
Exemplo
Consulte Manipulação de eventos no C++ nativo e Manipulação de eventos em COM para obter exemplos.
Confira também
Palavras-chave
event_source
event_receiver
__event
__hook
__raise
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de