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


__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