Udostępnij za pomocą


Błąd kompilatora C3703

"Procedura obsługi zdarzeń": metoda obsługi zdarzeń musi mieć taką samą klasę magazynu, jak źródło "zdarzenie"

Uwagi

Zdarzenie ma inną klasę magazynu niż procedura obsługi zdarzeń, do której jest podłączona. Na przykład ten błąd występuje, jeśli program obsługi zdarzeń jest statyczną funkcją składową, a zdarzenie nie jest statyczne. Aby naprawić ten błąd, nadaj zdarzeniu i programowi obsługi zdarzeń tę samą klasę magazynu.

Example

Poniższy przykład generuje kod C3703:

// C3703.cpp
// C3703 expected
#include <stdio.h>

[event_source(type=native)]
class CEventSrc {
public:
   __event static void MyEvent();
};

[event_receiver(type=native)]
class CEventHandler {
public:
   // delete the following line to resolve
   void MyHandler() {}

   // try the following line instead
   // static void MyHandler() {}

   void HookIt(CEventSrc* pSource) {
      __hook(CEventSrc::MyEvent, pSource, &CEventHandler::MyHandler);
   }

   void UnhookIt(CEventSrc* pSource) {
      __unhook(CEventSrc::MyEvent, pSource, &CEventHandler::MyHandler);
   }
};

int main() {
   CEventSrc src;
   CEventHandler hnd;

   hnd.HookIt(&src);
   __raise src.MyEvent();
   hnd.UnhookIt(&src);
}