Native C++ 이벤트 처리에서 event_source 및 event_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 | 통합 이벤트 모델 소개