Palavra-chave __hook
Associa um método de manipulador a 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 __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
source
);
Parâmetros
&SourceClass::EventMethod
Um ponteiro para o método de evento ao qual você engancha 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 sendo enganchado a receiver
, apenas para os receptores do 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
, source
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 a ser enganchado a 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, __hook
pressupõe que a classe é aquela a partir da qual ela é 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 __hook
é chamado.
Uso
Pode ser o uso em qualquer escopo da função, incluindo o principal, fora da classe do receptor de eventos.
Comentários
Use a função intrínseca __hook
em um receptor de eventos para associar ou enganchar um método de manipulador com um método de evento. O manipulador especificado é chamado quando a origem gera o evento especificado. Você pode enganchar vários manipuladores a um único evento, ou enganchar vários eventos a um único manipulador.
Há duas formas de __hook
. Você pode usar o primeiro formulário (quatro argumentos) na maioria dos casos, especificamente, para os receptores de eventos COM nos quais o parâmetro layout_dependent do atributo event_receiver
é false
.
Nesses casos você não precisa enganchar todos os métodos em uma interface antes de acionar um evento em um dos métodos. Você só precisa conectar o método que está manipulando o evento. Você pode usar o segundo formulário (dois argumentos) de __hook
apenas para um receptor de eventos COM no qual layout_dependent
= true
.
__hook
retorna um valor longo. Um valor de retorno diferente de zero indica que ocorreu um erro (eventos gerenciados lançam uma exceção).
O compilador verifica a existência de um evento e se a assinatura do evento concorda com a assinatura de delegação.
Você pode chamar __hook
e __unhook
fora do receptor do evento, exceto para eventos COM.
Uma alternativa ao uso de __hook
é usar o operador + =.
Para obter informações sobre a codificação gerenciada de eventos na nova sintaxe, consulte event
.
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
Manipulação de eventos
event_source
event_receiver
__event
__unhook
__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