Compartilhar via


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 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 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 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 __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