Compartilhar via


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 e EventMethod é o evento.

  • Eventos COM: SourceClass é a interface da origem do evento e EventMethod é um dos métodos.

  • Eventos gerenciados: SourceClass é a classe da origem do evento e EventMethod é 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 e HandlerMethod é o manipulador.

  • Eventos COM: ReceiverClass é a interface do receptor de eventos e HandlerMethod é um dos manipuladores.

  • Eventos gerenciados: ReceiverClass é a classe do receptor de eventos e HandlerMethod é 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