네이티브 C++에서 처리 하는 이벤트

네이티브 C++ 이벤트 처리를 사용 하 여 이벤트 소스와 이벤트 수신기를 설정 하 여 해당 event_sourceevent_receiver 각각 지정 특성 type=native.이 특성 클래스는 이벤트를 발생 하 고 네이티브, 비 COM 컨텍스트에 대 한 이벤트 처리 적용 허용 합니다.

이벤트 선언

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

이벤트 처리기 정의

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

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

또한 이벤트 수신기 클래스에서 내장 함수를 사용 하면 __hook 이벤트와 이벤트 처리기를 연결 하 고 __unhook 이벤트 처리기에서 이벤트 연결을 해제 하려면.이벤트 처리기에 여러 이벤트 또는 여러 이벤트 처리기를 이벤트에 연결할 수 있습니다.

이벤트를 발생 시키는

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

ee2k0a7d.collapse_all(ko-kr,VS.110).gif네이티브 C++ 이벤트 코드

다음 예제에서는 네이티브 C++에서 이벤트를 발생 시키는 방법을 보여 줍니다.컴파일 및이 예제를 실행 하려면 코드의 주석을 참조 하십시오.

예제

ee2k0a7d.collapse_all(ko-kr,VS.110).gif코드

// 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_s("MyHandler1 was called with value %d.\n", nValue);
   }

   void MyHandler2(int nValue) {
      printf_s("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);
}

ee2k0a7d.collapse_all(ko-kr,VS.110).gifOutput

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

참고 항목

참조

이벤트 처리