Поделиться через


__unhook

Отменяет связь метода обработчика с событием.

long  __unhook( 
   &SourceClass::EventMethod, 
   source, 
   &ReceiverClass::HandlerMethod
   [, receiver = this] 
); 
long  __unhook(  
   interface, 
   source 
); 
long  __unhook( 
   source  
);

Параметры

  • **&**SourceClass :: EventMethod
    Указатель на метод события, с помощью которого отсоединяется метод обработчика событий.

    • События неуправляемого C++: SourceClass является исходным классом, а EventMethod — событием.

    • События COM: SourceClass является исходным интерфейсом, а EventMethod — одним из его методов.

    • Управляемые события: SourceClass является исходным классом, а EventMethod — событием.

  • interface
    Имя интерфейса, отсоединяемого с помощью receiver, только для приемников событий COM, в которых параметр layout_dependent атрибута event_receiver имеет значение true.

  • source
    Указатель на экземпляр источника события. В зависимости от кода type, указанного в атрибуте event_receiver, source может быть одним из следующих элементов.

    • Собственный указатель на объект источника события.

    • Указатель на базе IUnknown (источник COM).

    • Указатель на управляемый объект (для управляемых событий).

  • **&**ReceiverClass :: HandlerMethod
    Указатель на метод обработчика событий, который необходимо отсоединить от события. Обработчик определяется как метод класса или ссылка на этот класс, и если не указать имя класса, __unhook считает классом тот класс, в котором он вызван.

    • События неуправляемого C++: ReceiverClass является классом приемника событий, а HandlerMethod — обработчиком.

    • События COM: ReceiverClass является интерфейсом приемника событий, а HandlerMethod — одним из его обработчиков.

    • Управляемые события: ReceiverClass является классом приемника событий, а HandlerMethod — обработчиком.

  • receiver (необязательно)
    Указатель на экземпляр класса приемника событий. Если не указать приемник, по умолчанию используется класс приемника или структура, в которой вызван __unhook.

Использование

Можно использовать в любой области видимости функции, включая функцию main, вне класса приемника событий.

Заметки

С помощью встроенной функции __unhook в приемнике событий можно отменить привязку или отсоединить метод обработчика от метода события.

Существует три формы __unhook. В большинстве случаев можно использовать первую форму (четыре аргумента). Вторую форму __unhook (два аргумента) можно использовать только для приемника событий COM, так как с ее помощью отсоединяется весь интерфейс событий. Третья форма (один аргумент) используется для отсоединения всех делегатов от указанного источника.

Ненулевое возвращаемое значение указывает на наличие ошибки (управляемые события создадут исключение).

Вызов __unhook в событии и обработчике событий, которые еще не присоединены, ни к чему не приведет.

Во время компиляции компилятор проверяет, что событие существует, и выполняет проверку типа параметра с указанным обработчиком.

За исключением событий COM __hook и __unhook можно вызвать вне приемника событий.

Вместо __unhook можно использовать оператор -=.

Дополнительные сведения о кодировании управляемых событий в новом синтаксисе см. в разделе событие (Visual C++).

Примечание

Класс-шаблон или структура не могут содержать события.

Пример

Примеры см. в разделах Обработка событий в неуправляемом C++ и Обработка событий в COM.

См. также

Ссылки

Ключевые слова в C++

event_source

event_receiver

__event

__hook

__raise