__event키워드(keyword)

이벤트를 선언합니다.

참고 항목

네이티브 C++의 이벤트 특성은 표준 C++와 호환되지 않습니다. 규칙 모드를 지정할 /permissive- 때 컴파일되지 않습니다.

구문

__event member-function-declarator ;
__event __interface interface-specifier ;
__event data-member-declarator ;

설명

Microsoft 관련 키워드(keyword) __event 멤버 함수 선언, 인터페이스 선언 또는 데이터 멤버 선언에 적용할 수 있습니다. 그러나 키워드(keyword) 사용하여 __event 중첩 클래스의 멤버를 한정할 수는 없습니다.

이벤트 소스 및 수신기가 네이티브 C++ 또는 COM이거나 관리되는지(.NET Framework)에 따라 다음 구문을 이벤트로 사용할 수 있습니다.

네이티브 C++ COM: 관리됨(.NET Framework)
멤버 함수 - 메서드(method)
- interface -
- - 데이터 멤버

이벤트 수신기에서 처리기 멤버 함수를 이벤트 멤버 함수와 연결하는 데 사용합니다 __hook . 키워드(keyword) 사용하여 __event 이벤트를 만든 후 해당 이벤트에 연결된 모든 이벤트 처리기는 나중에 이벤트가 호출될 때 호출됩니다.

멤버 함수 선언에는 __event 정의가 있을 수 없습니다. 정의는 암시적으로 생성되므로 이벤트 멤버 함수는 일반 멤버 함수인 것처럼 호출할 수 있습니다.

참고 항목

템플릿 클래스 또는 구조체는 이벤트를 포함할 수 없습니다.

네이티브 이벤트

네이티브 이벤트는 멤버 함수입니다. 반환 형식은 일반적으로 HRESULT 또는 void, 하지만 모든 정수 계열 형식을 포함 하 여 enum수 있습니다. 이벤트가 정수 반환 형식을 사용하는 경우 이벤트 처리기가 0이 아닌 값을 반환할 때 오류 조건이 정의됩니다. 이 경우 발생하는 이벤트는 다른 대리자를 호출합니다.

// Examples of native C++ events:
__event void OnDblClick();
__event HRESULT OnClick(int* b, char* s);

샘플 코드는 네이티브 C++의 이벤트 처리를 참조하세요.

COM 이벤트

COM 이벤트는 인터페이스입니다. 이벤트 원본 인터페이스에서 멤버 함수의 매개 변수는 매개 변수에 있어야 하지만 엄격하게 적용되지는 않습니다. 아웃 매개 변수는 멀티캐스트할 때 유용하지 않기 때문 입니다. out 매개 변수를 사용하는 경우 수준 1 경고가 발생합니다.

반환 형식은 일반적으로 HRESULT 또는 void,이지만 포함 하 여 enum모든 정수 계열 형식일 수 있습니다. 이벤트가 정수 반환 형식을 사용하고 이벤트 처리기가 0이 아닌 값을 반환하는 경우 오류 조건입니다. 발생하는 이벤트는 다른 대리자 호출을 중단합니다. 컴파일러는 생성된 IDL에서 이벤트 원본 인터페이스를 source 자동으로 표시합니다.

COM 이벤트 원본에는 __interface 항상 키워드(keyword) 필요합니다__event.

// Example of a COM event:
__event __interface IEvent1;

샘플 코드는 COM의 이벤트 처리를 참조하세요.

관리되는 이벤트

새 구문의 코딩 이벤트에 대한 자세한 내용은 이벤트를 참조하세요.

관리되는 이벤트는 데이터 멤버 또는 멤버 함수입니다. 이벤트와 함께 사용할 경우 대리자의 반환 형식은 공용 언어 사양준수해야 합니다. 이벤트 처리기의 반환 형식은 대리자의 반환 형식과 일치해야 합니다. 대리자에 대한 자세한 내용은 대리자 및 이벤트를 참조 하세요. 관리되는 이벤트가 데이터 멤버인 경우 그 형식은 대리자에 대한 포인터여야 합니다.

.NET Framework에서 데이터 멤버를 메서드(즉, 해당 대리자의 Invoke 메서드) 자체인 것처럼 취급할 수 있습니다. 이렇게 하려면 관리되는 이벤트 데이터 멤버를 선언하기 위한 대리자 형식을 미리 정의합니다. 반면, 관리되는 이벤트 메서드는 아직 정의되지 않은 경우 해당 관리되는 대리자를 암시적으로 정의합니다. 예를 들어 OnClick과 같은 이벤트 값을 다음과 같이 이벤트로 선언할 수 있습니다.

// Examples of managed events:
__event ClickEventHandler* OnClick;  // data member as event
__event void OnClick(String* s);  // method as event

관리되는 이벤트를 암시적으로 선언할 때 이벤트 처리기가 추가되거나 제거될 때 호출되는 접근자를 지정하고 remove 접근자를 지정할 add 수 있습니다. 클래스 외부에서 이벤트를 호출(발생)하는 멤버 함수를 정의할 수도 있습니다.

예: 네이티브 이벤트

// EventHandling_Native_Event.cpp
// compile with: /c
[event_source(native)]
class CSource {
public:
   __event void MyEvent(int nValue);
};

예: COM 이벤트

// EventHandling_COM_Event.cpp
// compile with: /c
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>

[ module(dll, name="EventSource", uuid="6E46B59E-89C3-4c15-A6D8-B8A1CEC98830") ];

[ dual, uuid("00000000-0000-0000-0000-000000000002") ]
__interface IEventSource {
   [id(1)] HRESULT MyEvent();
};
[ coclass, uuid("00000000-0000-0000-0000-000000000003"),  event_source(com) ]
class CSource : public IEventSource {
public:
   __event __interface IEventSource;
   HRESULT FireEvent() {
      __raise MyEvent();
      return S_OK;
   }
};

참고 항목

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