__event Słowa kluczowego

Deklaruje zdarzenie.

Uwaga

Atrybuty zdarzeń w natywnym języku C++ są niezgodne z językiem Standard C++. Nie są one kompilowane podczas określania /permissive- trybu zgodności.

Składnia

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

Uwagi

Słowo kluczowe __event specyficzne dla firmy Microsoft można zastosować do deklaracji funkcji składowej, deklaracji interfejsu lub deklaracji elementu członkowskiego danych. Nie można jednak użyć słowa kluczowego __event , aby zakwalifikować składową klasy zagnieżdżonej.

W zależności od tego, czy źródło zdarzeń i odbiornik są natywne dla języka C++, COM lub zarządzanego (.NET Framework), można użyć następujących konstrukcji jako zdarzeń:

Natywny język C++ Model COM Zarządzane (.NET Framework)
funkcja składowa - metoda
- interfejs -
- - składowa danych

Użyj __hook w odbiorniku zdarzeń, aby skojarzyć funkcję składową programu obsługi z funkcją składową zdarzenia. Po utworzeniu zdarzenia za pomocą słowa kluczowego __event wszystkie programy obsługi zdarzeń przyłączone do tego zdarzenia są następnie wywoływane po wywołaniu zdarzenia.

Deklaracja __event funkcji składowej nie może mieć definicji; definicja jest niejawnie generowana, więc funkcja składowa zdarzenia może być wywoływana tak, jakby była to dowolna zwykła funkcja składowa.

Uwaga

Klasa lub struktura szablonu nie może zawierać zdarzeń.

Zdarzenia natywne

Zdarzenia natywne są funkcjami składowych. Zwracany typ jest zwykle HRESULT lub void, ale może być dowolnym typem całkowitym enum, w tym . Gdy zdarzenie używa typu zwracanego całkowitego, warunek błędu jest definiowany, gdy program obsługi zdarzeń zwraca wartość niezerową. W takim przypadku zdarzenie, które jest wywoływane, wywołuje innych delegatów.

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

Zobacz Obsługa zdarzeń w natywnym języku C++ , aby uzyskać przykładowy kod.

Zdarzenia COM

Zdarzenia COM to interfejsy. Parametry funkcji składowej w interfejsie źródła zdarzeń powinny być w parametrach, ale nie jest rygorystycznie wymuszane. Jest to spowodowane tym, że parametr out nie jest przydatny podczas multiemisji. Jeśli używasz parametru out , zostanie wyświetlone ostrzeżenie poziomu 1.

Zwracany typ jest zazwyczaj HRESULT lub void, ale może być dowolnym typem całkowitym, w tym enum. Gdy zdarzenie używa typu zwracanego całkowitego i program obsługi zdarzeń zwraca wartość niezerową, jest to warunek błędu. Zdarzenie wywoływane przerywa wywołania do innych delegatów. Kompilator automatycznie oznacza interfejs źródła zdarzeń jako source element w wygenerowanym języku IDL.

Słowo __interface kluczowe jest zawsze wymagane po __event źródle zdarzeń COM.

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

Zobacz Obsługa zdarzeń w modelu COM , aby uzyskać przykładowy kod.

Zdarzenia zarządzane

Aby uzyskać informacje na temat kodowania zdarzeń w nowej składni, zobacz zdarzenie.

Zdarzenia zarządzane to elementy członkowskie danych lub funkcje członkowskie. W przypadku użycia ze zdarzeniem zwracany typ delegata musi być zgodny ze specyfikacją języka wspólnego. Zwracany typ programu obsługi zdarzeń musi być zgodny z typem zwrotnym delegata. Aby uzyskać więcej informacji na temat delegatów, zobacz Delegaty i zdarzenia. Jeśli zdarzenie zarządzane jest elementem członkowskim danych, jego typ musi być wskaźnikiem do delegata.

W programie .NET Framework można traktować element członkowski danych tak, jakby był to sama metoda (czyli Invoke metoda odpowiadającego mu delegata). W tym celu należy wstępnie zdefiniować typ delegata do deklarowania elementu członkowskiego danych zdarzeń zarządzanych. Z kolei metoda zdarzenia zarządzanego niejawnie definiuje odpowiedni delegat zarządzany, jeśli nie jest jeszcze zdefiniowany. Można na przykład zadeklarować wartość zdarzenia, taką jak OnClick zdarzenie w następujący sposób:

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

W przypadku niejawnego deklarowania zdarzenia zarządzanego można określić add metody i remove metody dostępu, które są wywoływane po dodaniu lub usunięciu procedur obsługi zdarzeń. Można również zdefiniować funkcję składową, która wywołuje (wywołuje) zdarzenie spoza klasy.

Przykład: Zdarzenia natywne

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

Przykład: zdarzenia 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;
   }
};

Zobacz też

Słowa kluczowe
Obsługa zdarzeń
event_source
event_receiver
__hook
__unhook
__raise