__hook키워드(keyword)

처리기 메서드를 이벤트와 연결합니다.

참고 항목

네이티브 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
특성의 event_receiver 매개 변수가 있는 COM 이벤트 수신기에 대해서만 연결receiver되는 layout_dependent 인터페이스 이름입니다true.

source
이벤트 소스의 인스턴스에 대한 포인터입니다. 에 지정된 event_receiversource 코드 type 에 따라 다음 형식 중 하나가 될 수 있습니다.

  • 네이티브 이벤트 소스 개체 포인터입니다.

  • IUnknownCOM 원본(-based pointer)입니다.

  • 관리되는 이벤트의 관리되는 개체 포인터입니다.

&ReceiverClass::HandlerMethod
이벤트에 후크될 이벤트 처리기 메서드에 대한 포인터입니다. 처리기는 클래스의 메서드 또는 동일한 참조로 지정됩니다. 클래스 이름을 __hook 지정하지 않으면 클래스가 호출된 클래스라고 가정합니다.

  • 네이티브 C++ 이벤트: ReceiverClass 이벤트 수신기 클래스이며 HandlerMethod 처리기입니다.

  • COM 이벤트: ReceiverClass 이벤트 수신기 인터페이스이며 HandlerMethod 해당 처리기 중 하나입니다.

  • 관리되는 이벤트: ReceiverClass 이벤트 수신기 클래스이며 HandlerMethod 처리기입니다.

receiver
(선택 사항) 이벤트 수신기 클래스의 인스턴스에 대한 포인터입니다. 수신기를 지정하지 않으면 기본값은 호출되는 __hook 수신기 클래스 또는 구조체입니다.

사용

이벤트 수신기 클래스 외부의 main을 포함하여 모든 함수 범위에서 사용할 수 있습니다.

설명

이벤트 수신기의 내장 함수 __hook 를 사용하여 처리기 메서드를 이벤트 메서드와 연결하거나 후크합니다. 이렇게 하면 소스에서 지정된 이벤트를 발생시킬 때 지정된 처리기가 호출됩니다. 여러 처리기를 단일 이벤트에 후크하거나 여러 이벤트를 단일 처리기에 후크할 수 있습니다.

두 가지 형식이 있습니다 __hook. 특성의 layout_dependent 매개 변수 event_receiver 가 있는 COM 이벤트 수신기의 경우 대부분의 경우 첫 번째(4 인수) 양식을 사용할 수 있습니다false.

이러한 경우 메서드 중 하나에서 이벤트를 실행하기 전에 인터페이스의 모든 메서드를 후크할 필요가 없습니다. 이벤트를 처리하는 메서드만 후크하면 됩니다. 두 번째(두 인수) 형식 __hook 은 COM 이벤트 수신기에만 사용할 수 있습니다 layout_dependent= true.

__hook 는 긴 값을 반환합니다. 0이 아닌 반환 값은 오류가 발생했음을 나타냅니다(관리되는 이벤트가 예외를 throw함).

컴파일러는 이벤트가 있는지 확인하고 이벤트 시그니처가 대리자 시그니처와 일치하는지 확인합니다.

COM 이벤트를 제외하고 이벤트 수신기 외부에서 호출 __hook__unhook 할 수 있습니다.

사용 __hook 대신 += 연산자를 사용하는 것이 좋습니다.

새 구문에서 관리되는 이벤트를 코딩하는 방법에 대한 자세한 내용은 다음을 참조하세요 event.

참고 항목

템플릿 기반 클래스 또는 구조체에 event를 포함시킬 수 없습니다.

예시

샘플은 네이티브 C++의 이벤트 처리 및 COM의 이벤트 처리를 참조하세요.

참고 항목

키워드
이벤트 처리
event_source
event_receiver
__event
__unhook
__raise