__hook
Связывает метод обработчика с событием.
long __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
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
Указатель на метод обработчика событий, который необходимо присоединить к событию. Обработчик определяется как метод класса или ссылка на этот класс, и если не указать имя класса, __hook считает классом тот класс, в котором он вызван.События неуправляемого C++: ReceiverClass является классом приемника событий, а HandlerMethod — обработчиком.
События COM: ReceiverClass является интерфейсом приемника событий, а HandlerMethod — одним из его обработчиков.
Управляемые события: ReceiverClass является классом приемника событий, а HandlerMethod — обработчиком.
receiver (необязательно)
Указатель на экземпляр класса приемника событий. Если не указать приемник, по умолчанию используется класс приемника или структура, в которой вызван __hook.
Использование
Можно использовать в любой области видимости функции, включая функцию main, вне класса приемника событий.
Заметки
С помощью встроенной функции __hook в приемнике событий можно связать или присоединить метод обработчика к методу события. Затем, когда этот источник вызывает указанное событие, вызывается указанный обработчик. Можно подключить несколько обработчиков к одному событию или несколько событий к одному обработчику.
Существует две формы __hook. В большинстве случаев можно использовать первую форму (с четырьмя аргументами), в частности, для приемников событий COM, в которых параметр layout_dependent атрибута event_receiver имеет значение false.
В таких случаях не требуется присоединять все методы в интерфейсе перед порождением события в одном из методов; достаточно присоединить только метод, обрабатывающий событие. Вторую форму (с двумя аргументами) функции __hook можно использовать только для приемника событий COM, в котором параметр layout_dependent**=true**.
Функция __hook возвращает значение long. Ненулевое возвращаемое значение указывает на наличие ошибки (управляемые события создают исключение).
Компилятор проверяет наличие события и соответствие сигнатур события и делегата.
За исключением событий COM __hook и __unhook можно вызвать вне приемника событий.
Вместо __hook можно использовать оператор +=.
Дополнительные сведения о кодировании управляемых событий в новом синтаксисе см. в разделе событие (Visual C++).
Примечание
Класс-шаблон или структура не могут содержать события.
Пример
Примеры см. в разделах Обработка событий в неуправляемом C++ и Обработка событий в COM.