次の方法で共有


コンパイラ エラー C3703

'event handler': イベント ハンドラー メソッド は ソース 'event' と同じストレージ クラスを必要とします

event には、そのフック先であるイベント ハンドラーとは異なるストレージ クラスがあります。 たとえば、このエラーは、イベント ハンドラーが静的メンバー関数であり、イベントが静的でない場合に発生します。 このエラーを解決するには、イベントとイベント ハンドラーのストレージ クラスを同じにします。

次の例では 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);
}