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


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

См. также

Ссылки

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

Обработка событий

event_source

event_receiver

__unhook

__raise