__unhook
ключевое слово
Отсоединяет метод обработчика от события.
Примечание.
Атрибуты событий в собственном языке C++ несовместимы со стандартом C++. Они не компилируются при указании /permissive-
режима соответствия.
Синтаксис
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
Имя интерфейса, отсохнувшееся от приемника, только для приемников событий COM, в которых layout_dependent true
параметр атрибутаevent_receiver
.
source
Указатель на экземпляр источника события. В зависимости от кода type
, указанного в event_receiver
, источник может быть одним из следующих типов:
Собственный указатель на объект источника события.
Указатель
IUnknown
на основе кода (COM-источник).Указатель на управляемый объект (для управляемых событий).
&ReceiverClass::HandlerMethod
Указатель на метод обработчика событий для отмены перехвата из события. Обработчик указывается в качестве метода класса или ссылки на то же самое; Если имя класса не указано, предполагается, __unhook
что класс будет классом, в котором он вызывается.
Собственные события C++ —
ReceiverClass
это класс приемника событий иHandlerMethod
обработчик.COM-события:
ReceiverClass
это интерфейс приемника событий иHandlerMethod
является одним из его обработчиков.Управляемые события:
ReceiverClass
это класс приемника событий иHandlerMethod
обработчик.
receiver
(необязательно) Указатель на экземпляр класса приемника событий. Если получатель не указан, по умолчанию используется класс или структура приемника, в которой __unhook
вызывается.
Использование
Можно использовать в любой функции область, в том числе main
за пределами класса приемника событий.
Замечания
Используйте встроенную функцию __unhook
в приемнике событий для отмены или отмены перехвата метода обработчика из метода события.
Существует три формы __unhook
. В большинстве случаев можно использовать первую форму (четыре аргумента). Вы можете использовать вторую форму __unhook
(двух аргументов) только для приемника событий COM; она отсохнула весь интерфейс событий. Третья форма (один аргумент) используется для отсоединения всех делегатов от указанного источника.
Ненулевое возвращаемое значение указывает на наличие ошибки (управляемые события создадут исключение).
Если вы вызываете __unhook
событие и обработчик событий, которые еще не подключены, он не будет иметь эффекта.
Во время компиляции компилятор проверяет, что событие существует, и выполняет проверку типа параметра с указанным обработчиком.
Вы можете вызывать __hook
и __unhook
за пределами приемника событий, за исключением событий COM.
Альтернативой использованию является использование __unhook
оператора -=.
Сведения о кодировании управляемых событий в новом синтаксисе см. в разделе событий.
Примечание.
Класс-шаблон или структура не могут содержать события.
Пример
Примеры см. в разделе "Обработка событий в машинном коде C++ и обработка событий в COM ".
См. также
Ключевые слова
event_source
event_receiver
__event
__hook
__raise
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по