Native C++에서 이벤트 처리

보기 전환:
ScriptFree
Visual C++ 개념: 기능 추가
Native C++에서 이벤트 처리

Native C++ 이벤트 처리에서 event_sourceevent_receiver 특성을 사용하고 각각 type=native를 지정하여 이벤트 소스 및 이벤트 수신기를 설정합니다. 이들 특성을 사용하면 해당 특성이 적용되는 클래스에서 이벤트를 발생시킬 수 있으며 COM이 아닌 기본 컨텍스트의 이벤트를 처리할 수 있습니다.

이벤트 선언

이벤트 소스 클래스의 메서드 선언에서 __event 키워드를 사용하여 메서드를 이벤트로 선언합니다. 메서드를 선언하되 정의하지는 마십시오. 컴파일러가 메서드를 이벤트로 만들 때 암시적으로 메서드를 정의하기 때문에 메서드를 정의하면 컴파일러 오류가 발생합니다. 기본 이벤트는 0개 이상의 매개 변수를 가질 수 있는데 메서드일 수 있습니다. 반환 형식은 void 또는 모든 정수 계열 형식이 될 수 있습니다.

이벤트 처리기 정의

이벤트 수신기 클래스에서 처리하려는 이벤트와 시그니처(반환 형식, 호출 규칙 및 인수)가 일치하는 메서드인 이벤트 처리기를 정의합니다.

이벤트에 이벤트 처리기 후크

또한 이벤트 수신기 클래스에서 내장 함수 __hook를 사용하여 이벤트를 이벤트 처리기와 연결하고 __unhook를 사용하여 이벤트와 이벤트 처리기 연결을 끊습니다. 몇 개의 이벤트를 하나의 이벤트 처리기에 후크하거나 몇 개의 이벤트 처리기를 하나의 이벤트에 후크할 수 있습니다.

이벤트 발생

이벤트를 발생시키려면 이벤트 소스 클래스에서 이벤트로 선언된 메서드를 호출합니다. 처리기가 이벤트에 후크된 경우 처리기가 호출됩니다.

Native C++ 이벤트 코드

다음 예제는 Native C++에서 이벤트를 발생시키는 방법을 보여 줍니다. 코드의 주석을 참조하여 예제를 컴파일하고 실행합니다.

// evh_native.cpp
#include <stdio.h>

[event_source(native)]
class CSource {
public:
   __event void MyEvent(int nValue);
};

[event_receiver(native)]
class CReceiver {
public:
   void MyHandler1(int nValue) {
      printf("MyHandler1 was called with value %d.\n", nValue);
   }

   void MyHandler2(int nValue) {
      printf("MyHandler2 was called with value %d.\n", nValue);
   }

   void hookEvent(CSource* pSource) {
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }

   void unhookEvent(CSource* pSource) {
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }
};

int main() {
   CSource source;
   CReceiver receiver;

   receiver.hookEvent(&source);
   __raise source.MyEvent(123);
   receiver.unhookEvent(&source);
}

출력

MyHandler2 was called with value 123.
MyHandler1 was called with value 123.

참고 항목

Visual C++에서 이벤트 처리 | Event Handling Keywords | 통합 이벤트 모델 소개