Aracılığıyla paylaş


Olay işleme yerel C++ '

Yerel C++ olay işleme, kullanarak bir olay kaynağı ve olay alıcı ayarlamak OLAY_KAYNAĞI ve event_receiver sırasıyla belirten öznitelikleri type=native.Bu öznitelikler olayları yangın ve doğal, com bağlamında olayları işlemek için uygulanmadan sınıfları sağlar.

Olayları bildirme

Bir olay kaynağı sınıfı kullanmak __event yöntemi bir olay olarak bildirmek için yöntem bildiriminde anahtar sözcüğü.Yöntem bildirmek emin olun, ancak bunu tanımlamak değil; Bunu yapmak için bir olayı yapıldığında, derleyici yöntemi dolaylı olarak tanımladığından bir derleyici hatası oluşturur.Sıfır veya daha fazla parametre yöntemleriyle doğal olaylar olabilir.Dönüş türü void veya herhangi bir tam sayı türü olabilir.

Olay İşleyicileri Tanımlama

Bir olay alıcı sınıfı yöntemleri ele olay uyan (dönüş türleri arama kuralları ve bağımsız değişkenler) imzaları ile olay işleyicileri tanımlayın.

Olayları için olay işleyicileri takma

Ayrıca bir olay alıcı sınıfı, içsel işlevini kullanın __hook olayları olay işleyicileri ile ilişkilendirmek ve __unhook olay işleyicileri olay DISSOCIATE için.Çeşitli olaylar için bir olay işleyicisi veya birden çok olay işleyicisini olaya bağlayın.

Olay tetikleme

Bir olayı için bir olay olay kaynak sınıfı bildirilmiş yöntemi çağırın.İşleyicileri olay API'lerin, işleyicileri denir.

ee2k0a7d.collapse_all(tr-tr,VS.110).gifYerel C++ olay kodu

Aşağıdaki örnek, yerel C++ bir olay tetikleyin gösterilmiştir.Derleyip örneği çalıştırmak için koddaki açıklamalara başvurun.

Örnek

ee2k0a7d.collapse_all(tr-tr,VS.110).gifKod

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

ee2k0a7d.collapse_all(tr-tr,VS.110).gifÇıktı

MyHandler2 was called with value 123.
MyHandler1 was called with value 123.

Ayrıca bkz.

Başvuru

Olay işleme