__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_dependent
event_receiver
параметр true
атрибута.
source
Указатель на экземпляр источника события. В зависимости от указанного в event_receiver
source
коде 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по