Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Palavra-chave
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 (com dois argumentos) de __hook apenas para um receptor de eventos COM em que 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