__hookключевое слово

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

Примечание.

Атрибуты событий в собственном языке C++ несовместимы со стандартом C++. Они не компилируются при указании /permissive- режима соответствия.

Синтаксис

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_dependentevent_receiver параметр trueатрибута.

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

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

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

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

&ReceiverClass::HandlerMethod
Указатель на метод обработчика событий, который необходимо присоединить к событию. Обработчик указывается в качестве метода класса или ссылки на то же самое. Если имя класса не указано, предполагается, __hook что класс является одним из вызываемого.

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

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

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

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

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

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

Замечания

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

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

В таких случаях не требуется перехватывать все методы в интерфейсе перед запуском события на одном из методов. Необходимо только подключить метод, обрабатывая событие. Вы можете использовать вторую (двух аргумент) форму __hook только для приемника событий COM, в котором layout_dependent= true.

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

Компилятор проверяет наличие события и соответствие сигнатур события и делегата.

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

Альтернативой использованию является использование __hook оператора +=.

Сведения об кодировании управляемых событий в новом синтаксисе см. в статье event.

Примечание.

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

Пример

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

См. также

Ключевые слова
Обработка событий
event_source
event_receiver
__event
__unhook
__raise