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