__event__event

イベントを宣言します。Declares an event.

構文Syntax

__event method-declarator;
__event __interface interface-specifier;
__event member-declarator;

RemarksRemarks

キーワード _ _eventメソッドの宣言、インターフェイス宣言、またはデータ メンバーの宣言に適用できます。The keyword __event can be applied to a method declaration, an interface declaration, or a data member declaration. ただし、使用することはできません、 _ _eventキーワードを入れ子になったクラスのメンバーを修飾します。However, you cannot 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)
メソッドMethod メソッドmethod
interfaceinterface
データ メンバーdata member

使用_ _hookハンドラー メソッドをイベント メソッドに関連付けるには、イベント レシーバーでします。Use __hook in an event receiver to associate a handler method with an event method. 後のイベントを作成することに注意して、 _ _eventキーワード、イベントが呼び出されると、その後、そのイベントにフックすべてのイベント ハンドラーが呼び出されます。Note that after you create an event with the __event keyword, all event handlers subsequently hooked to that event will be called when the event is called.

_ _Eventメソッドの宣言は定義を持つことはできません。 定義を暗黙的に生成されると、通常のメソッドの場合と同様、イベントのメソッドを呼び出せるようにします。An __event method declaration cannot have a definition; a definition is implicitly generated, so the event method can be called as if it were any ordinary method.

注意

テンプレート クラスまたは構造体にイベントを含めることはできません。A templated class or struct cannot contain events.

ネイティブ イベントNative Events

ネイティブ イベントはメソッドです。Native events are methods. 戻り値の型は、通常、HRESULT またはvoid、任意の整数型を指定できますなど、 enumします。The return type is typically HRESULT or void, but can be any integral type, including an enum. イベントが整数の戻り値の型を使用していて、イベント ハンドラーがゼロ以外の値を返すときのエラー条件が定義されていると、発生するイベントは他のデリゲートを呼び出します。When an event uses an integral return type, an error condition is defined when an event handler returns a nonzero value, in which case the event being raised will call 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 method in an event source interface should be in parameters (but this is not rigorously enforced), because an out parameter is not useful when multicasting. 使用する場合に、レベル 1 の警告が発行される、アウトパラメーター。A level 1 warning will be issued if you use an out parameter.

戻り値の型は、通常、HRESULT またはvoid、任意の整数型を指定できますが、含む列挙型します。The return type is typically HRESULT or void, but can be any integral type, including enum. イベントが整数の戻り値の型を使用していて、イベント ハンドラーがゼロ以外の値を返すと、これはエラー状態であり、発生するイベントは他のデリゲートの呼び出しをアボートします。When an event uses an integral return type and an event handler returns a nonzero value, it is an error condition, in which case the event being raised aborts calls to the other delegates. コンパイラはイベント ソース インターフェイスとしてのマークで自動的に注意してください、ソース生成された IDL にします。Note that the compiler will automatically mark an event source interface as a source in the generated IDL.

_ _Interfaceキーワードの後に必要なは常に _ _event COM イベント ソース。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 methods. イベントと共に使用すると、デリゲートの戻り値の型が準拠する必要があります、共通言語仕様します。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). マネージド イベント データ メンバーを宣言するためのデリゲート型を事前に定義する必要があります。You must 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 is not 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

マネージド イベントを暗黙的に宣言するときは、イベント ハンドラーが追加または削除されたときに呼び出される追加および削除アクセサーを指定できます。When implicitly declaring a managed event, you can specify add and remove accessors that will be called when event handlers are added or removed. クラスの外部からイベントを呼び出す (発生させる) メソッドを定義することもできます。You can also define the method 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_sourceevent_source
event_receiverevent_receiver
__hook__hook
__unhook__unhook
__raise__raise