编译器错误 C3731

不兼容的事件“function1”和处理程序“function2”;事件源和事件处理程序必须是同一类型

事件源和事件接收器必须具有相同的类型(例如 nativecom 类型)。 要修复此错误,请使事件源和事件处理程序的类型匹配。

下面的示例生成 C3731:

// C3731.cpp
// compile with: /clr
#using <mscorlib.dll>
[event_source(native)]
struct A {
   __event void MyEvent();
};

[event_receiver(managed)]
// try the following line instead
// [event_receiver(native)]
struct B {
   void func();
   B(A a) {
      __hook(&A::MyEvent, &a, &B::func);   // C3731
   }
};

int main() {
}