Zpracování událostí v nativním jazyce C++
V nativním zpracování událostí jazyka C++, nastavte událost zdroj a událost přijímače pomocí Zdroj_události a event_receiver atributy, určení type=native.Tyto atributy umožňují tříd, na které se vztahují požární události a zpracování událostí v kontextu nativní, -COM.
Deklarace události
Třída události zdroje použít položky __event klíčové slovo v deklaraci metody deklarovat metodu jako událost.Přesvědčte se, zda deklarovat metodu, ale není definovat k tomu bude generovat chybu kompilátoru, protože kompilátor definuje metodu implicitně při přeměně událost.Nativní události může být nula nebo více parametrů metody.Návratový typ může být typu void nebo všechny nedílnou.
Definování obslužné rutiny událostí
Třída události přijímač definujete obslužné rutiny událostí, které jsou metody s podpisy (návratové typy volání úmluv a argumenty), které odpovídají událost, která se budou zpracovávat.
Zapojení obslužné rutiny události
Také v přijímač třída události funkci vnitřní __hook přidružit obslužné rutiny události a __unhook k oddělit z obslužné rutiny události.Lze připojit několik událostí na obslužné rutiny události nebo několik obslužné rutiny události.
Při aktivaci události
Požární událost jednoduše volejte metodu deklarovat jako událost událostí zdrojová třída.Pokud obslužné rutiny jste byl připojený k události, se nazývá obslužných rutin.
Nativní kód události jazyka C++
Následující příklad ukazuje, jak oheň událost v nativním jazyce C++.Kompilace a spuštění příkladu, naleznete v poznámkách v kódu.
Příklad
Kód
// 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_s("MyHandler1 was called with value %d.\n", nValue);
}
void MyHandler2(int nValue) {
printf_s("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);
}
Výsledek
MyHandler2 was called with value 123.
MyHandler1 was called with value 123.