__event 키워드로__event keyword

이벤트를 선언합니다.Declares 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

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

설명Remarks

Microsoft 전용 키워드는 __event 멤버 함수 선언, 인터페이스 선언 또는 데이터 멤버 선언에 적용할 수 있습니다.The Microsoft-specific keyword __event can be applied to a member function declaration, an interface declaration, or a data member declaration. 그러나 키워드를 사용 하 여 __event 중첩 된 클래스의 멤버를 한정할 수는 없습니다.However, you can't use the __event keyword to qualify a member of a nested class.

이벤트 소스 및 수신기가 네이티브 C++ 또는 COM이거나 관리되는지(.NET Framework)에 따라 다음 구문을 이벤트로 사용할 수 있습니다.Depending on whether your event source and receiver are native C++, COM, or managed (.NET Framework), you can use the following constructs as events:

네이티브 C++Native C++ COMCOM 관리됨(.NET Framework)Managed (.NET Framework)
멤버 함수member function - methodmethod
- interface(인터페이스)interface -
- - 데이터 멤버(data member)data member

__hook이벤트 수신기에서를 사용 하 여 처리기 멤버 함수를 이벤트 멤버 함수와 연결 합니다.Use __hook in an event receiver to associate a handler member function with an event member function. 키워드를 사용 하 여 이벤트를 만든 후에 __event 는 이벤트가 호출 될 때 이후에 해당 이벤트에 후크 된 모든 이벤트 처리기가 호출 됩니다.After you create an event with the __event keyword, all event handlers hooked to that event afterward get called when the event is called.

__event 멤버 함수 선언에는 정의를 사용할 수 없습니다. 정의는 암시적으로 생성 되므로 이벤트 멤버 함수를 일반 멤버 함수인 것 처럼 호출할 수 있습니다.An __event member function declaration can't have a definition; a definition is implicitly generated, so the event member function can be called as if it were any ordinary member function.

참고

템플릿 기반 클래스 또는 구조체는 이벤트를 포함할 수 없습니다.A templated class or struct can't contain events.

네이티브 이벤트Native events

네이티브 이벤트는 멤버 함수입니다.Native events are member functions. 반환 형식은 일반적으로 HRESULT 또는 void 이지만을 비롯 한 모든 정수 계열 형식일 수 있습니다 enum .The return type is typically HRESULT or void, but can be any integral type, including an enum. 이벤트가 정수 계열 반환 형식을 사용 하는 경우 이벤트 처리기가 0이 아닌 값을 반환 하면 오류 조건이 정의 됩니다.When an event uses an integral return type, an error condition is defined when an event handler returns a nonzero value. 이 경우 발생 하는 이벤트는 다른 대리자를 호출 합니다.In this case, the event that's raised calls the other delegates.

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

샘플 코드는 네이티브 c + +에서 이벤트 처리 를 참조 하세요.See Event Handling in Native C++ for sample code.

COM 이벤트COM events

COM 이벤트는 인터페이스입니다.COM events are interfaces. 이벤트 소스 인터페이스에서 멤버 함수의 매개 변수는 매개 변수 여야 하지만 엄격 하 게 적용 되지 않습니다.The parameters of a member function in an event source interface should be in parameters, but it isn't rigorously enforced. 아웃 캐스트를 사용할 경우 out 매개 변수가 유용 하지 않기 때문입니다.It's because an out parameter isn't useful when multicasting. Out 매개 변수를 사용 하는 경우 수준 1 경고가 발생 합니다.A level 1 warning is issued if you use an out parameter.

반환 형식은 일반적으로 HRESULT 또는 void 이지만를 비롯 한 모든 정수 계열 형식일 수 있습니다 enum .The return type is typically HRESULT or void, but can be any integral type, including enum. 이벤트가 정수 계열 반환 형식을 사용 하 고 이벤트 처리기가 0이 아닌 값을 반환 하는 경우 오류 조건입니다.When an event uses an integral return type and an event handler returns a nonzero value, it's an error condition. 발생 하는 이벤트는 다른 대리자에 대 한 호출을 중단 합니다.The event being raised aborts the calls to the other delegates. 컴파일러는 source 생성 된 IDL에서 이벤트 소스 인터페이스를로 자동으로 표시 합니다.The compiler automatically marks an event source interface as a source in the generated IDL.

__interfaceCOM 이벤트 원본의 경우 키워드는 항상 필수입니다 __event .The __interface keyword is always required after __event for a COM event source.

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

샘플 코드는 COM에서 이벤트 처리 를 참조 하세요.See Event handling in COM for sample code.

관리 되는 이벤트Managed events

새 구문의 이벤트 코딩에 대 한 자세한 내용은 이벤트를 참조 하세요.For information on coding events in the new syntax, see event.

관리 되는 이벤트는 데이터 멤버 또는 멤버 함수입니다.Managed events are data members or member functions. 이벤트와 함께 사용 하는 경우 대리자의 반환 형식은 공용 언어 사양과호환 되어야 합니다.When used with an event, the return type of a delegate must be compliant with the Common Language Specification. 이벤트 처리기의 반환 형식은 대리자의 반환 형식과 일치해야 합니다.The return type of the event handler must match the return type of the delegate. 대리자에 대 한 자세한 내용은 대리자 및 이벤트를 참조 하세요.For more information on delegates, see Delegates and Events. 관리되는 이벤트가 데이터 멤버인 경우 그 형식은 대리자에 대한 포인터여야 합니다.If a managed event is a data member, its type must be a pointer to a delegate.

.NET Framework에서 데이터 멤버를 메서드(즉, 해당 대리자의 Invoke 메서드) 자체인 것처럼 취급할 수 있습니다.In the .NET Framework, you can treat a data member as if it were a method itself (that is, the Invoke method of its corresponding delegate). 이렇게 하기 위해 관리 되는 이벤트 데이터 멤버를 선언 하기 위해 대리자 형식을 미리 정의할 수 있습니다.To do so, predefine the delegate type for declaring a managed event data member. 반면에 관리 되는 이벤트 메서드는 해당 하는 관리 되는 대리자 (이미 정의 되지 않은 경우)를 암시적으로 정의 합니다.In contrast, a managed event method implicitly defines the corresponding managed delegate if it isn't already defined. 예를 들어 OnClick과 같은 이벤트 값을 다음과 같이 이벤트로 선언할 수 있습니다.For example, you can declare an event value such as OnClick as an event as follows:

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

관리 되는 이벤트를 암시적으로 선언 하는 add 경우 remove 이벤트 처리기가 추가 되거나 제거 될 때 호출 되는 및 접근자를 지정할 수 있습니다.When implicitly declaring a managed event, you can specify add and remove accessors that get called when event handlers are added or removed. 클래스 외부에서 이벤트를 호출 (발생) 하는 멤버 함수를 정의할 수도 있습니다.You can also define the member function that calls (raises) the event from outside the class.

예: 네이티브 이벤트Example: Native events

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

예: COM 이벤트Example: COM events

// 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;
   }
};

참조See also

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