__hook 키워드로__hook keyword

처리기 메서드를 이벤트와 연결합니다.Associates a handler method with an event.

참고

네이티브 c + +의 이벤트 특성은 표준 c + +와 호환 되지 않습니다.Event attributes in native C++ are incompatible with Standard C++. 규칙 모드를 지정 하는 경우에는 컴파일되지 않습니다 /permissive- .They don't compile when you specify /permissive- conformance mode.

구문Syntax

long __hook(
    &SourceClass::EventMethod,
    source,
    &ReceiverClass::HandlerMethod
    [, receiver = this]
);

long __hook(
    interface,
    source
);

매개 변수Parameters

&SourceClass::EventMethod
이벤트 처리기 메서드를 후크할 이벤트 메서드에 대한 포인터입니다.A pointer to the event method to which you hook the event handler method:

  • 네이티브 c + + 이벤트: SourceClass 는 이벤트 소스 클래스 이며 EventMethod 이벤트입니다.Native C++ events: SourceClass is the event source class and EventMethod is the event.

  • COM 이벤트: SourceClass 는 이벤트 소스 인터페이스 이며 EventMethod 해당 메서드 중 하나입니다.COM events: SourceClass is the event source interface and EventMethod is one of its methods.

  • 관리 되는 이벤트: 이벤트 SourceClass 소스 클래스 이며 EventMethod 이벤트입니다.Managed events: SourceClass is the event source class and EventMethod is the event.

interface
후크 되는 인터페이스 이름으로 receiver , layout_dependent 특성의 매개 변수가 인 COM 이벤트 수신기에만 해당 합니다 event_receiver true .The interface name being hooked to receiver, only for COM event receivers in which the layout_dependent parameter of the event_receiver attribute is true.

source
이벤트 소스의 인스턴스에 대한 포인터입니다.A pointer to an instance of the event source. type에 지정 된 코드에 따라 event_receiversource 다음 형식 중 하나일 수 있습니다.Depending on the code type specified in event_receiver, source can be one of these types:

  • 네이티브 이벤트 소스 개체 포인터입니다.A native event source object pointer.

  • IUnknown기반 포인터 (COM 원본)입니다.An IUnknown-based pointer (COM source).

  • 관리되는 이벤트의 관리되는 개체 포인터입니다.A managed object pointer (for managed events).

&ReceiverClass::HandlerMethod
이벤트에 후크될 이벤트 처리기 메서드에 대한 포인터입니다.A pointer to the event handler method to be hooked to an event. 처리기는 클래스의 메서드 또는 동일한에 대 한 참조로 지정 됩니다.The handler is specified as a method of a class or a reference to the same. 클래스 이름을 지정 하지 않으면에서 클래스가 호출 된 것으로 __hook 가정 합니다.If you don't specify the class name, __hook assumes the class is the one it's called from.

  • 네이티브 c + + 이벤트: ReceiverClass 는 이벤트 수신기 클래스이 고는 HandlerMethod 처리기입니다.Native C++ events: ReceiverClass is the event receiver class and HandlerMethod is the handler.

  • COM 이벤트: ReceiverClass 는 이벤트 수신기 인터페이스 이며 HandlerMethod 해당 처리기 중 하나입니다.COM events: ReceiverClass is the event receiver interface and HandlerMethod is one of its handlers.

  • 관리 되는 이벤트:는 ReceiverClass 이벤트 수신기 클래스이 고는 HandlerMethod 처리기입니다.Managed events: ReceiverClass is the event receiver class and HandlerMethod is the handler.

receiver
필드 이벤트 수신기 클래스의 인스턴스에 대 한 포인터입니다.(Optional) A pointer to an instance of the event receiver class. 수신기를 지정 하지 않는 경우 기본값은가 호출 되는 받는 사람 클래스 또는 구조체입니다 __hook .If you don't specify a receiver, the default is the receiver class or structure in which __hook is called.

사용량Usage

이벤트 수신기 클래스 외부의 main을 포함하여 모든 함수 범위에서 사용할 수 있습니다.Can be use in any function scope, including main, outside the event receiver class.

설명Remarks

이벤트 수신기에서 내장 함수를 사용 __hook 하 여 처리기 메서드를 이벤트 메서드와 연결 하거나 후크 합니다.Use the intrinsic function __hook in an event receiver to associate or hook a handler method with an event method. 이렇게 하면 소스에서 지정된 이벤트를 발생시킬 때 지정된 처리기가 호출됩니다.The specified handler is then called when the source raises the specified event. 여러 처리기를 단일 이벤트에 후크하거나 여러 이벤트를 단일 처리기에 후크할 수 있습니다.You can hook several handlers to a single event or hook several events to a single handler.

에는 두 가지 형태가 있습니다 __hook .There are two forms of __hook. 대부분의 경우, 특히 특성의 layout_dependent 매개 변수가 인 COM 이벤트 수신기에 대해 첫 번째 (4 개 인수) 형식을 사용할 수 있습니다 event_receiver false .You can use the first (four-argument) form in most cases, specifically, for COM event receivers in which the layout_dependent parameter of the event_receiver attribute is false.

이러한 경우에는 메서드 중 하나에서 이벤트를 발생 시키기 전에 인터페이스의 모든 메서드를 후크 할 필요가 없습니다.In these cases, you don't need to hook all methods in an interface before firing an event on one of the methods. 이벤트를 처리 하는 메서드만 후크 해야 합니다.You only need to hook the method handling the event. 의 두 번째 (두 인수) 형식은 __hook COM 이벤트 수신기에만 사용할 수 있습니다 layout_dependent = true .You can use the second (two-argument) form of __hook only for a COM event receiver in which layout_dependent = true.

__hook long 값을 반환 합니다.__hook returns a long value. 0이 아닌 반환 값은 오류가 발생했음을 나타냅니다(관리되는 이벤트가 예외를 throw함).A nonzero return value indicates that an error has occurred (managed events throw an exception).

컴파일러는 이벤트가 있는지 확인하고 이벤트 시그니처가 대리자 시그니처와 일치하는지 확인합니다.The compiler checks for the existence of an event and that the event signature agrees with the delegate signature.

__hook __unhook COM 이벤트를 제외 하 고 이벤트 수신기 외부에서 및를 호출할 수 있습니다.You can call __hook and __unhook outside the event receiver, except for COM events.

를 사용 하는 대신 __hook + = 연산자를 사용 합니다.An alternative to using __hook is to use the += operator.

새 구문에서 관리 되는 이벤트를 코딩 하는 방법에 대 한 자세한 내용은을 참조 하십시오 event .For information on coding managed events in the new syntax, see event.

참고

템플릿 기반 클래스 또는 구조체에 event를 포함시킬 수 없습니다.A templated class or struct cannot contain events.

예제Example

네이티브 c + +에서 이벤트 처리 및 샘플에 대 한 COM에서 이벤트 처리 를 참조 하세요.See Event handling in native C++ and Event handling in COM for samples.

참조See also

Keywords
이벤트 처리Event handling
event_source
event_receiver
__event
__unhook
__raise