关于c#传递参数ref结构体到c++cli的有关问题,求解

关于c#传递参数ref结构体到c++cli的问题,求解
c++cli中M类 回调声明及事件:
delegate int CBOnError(CStruct %pInfo,int i);//CStruct是一个c++的结构体

 event CBOnError^ OnError {
  void add(CBOnError^ p) {RegOnError(p);}
  void remove(CBOnError^ p) {RegOnError(nullptr);}  
  }


c#中回调函数:
int m_OnError(ref CStruct pInfo, int i)//这里的CStruct是在c#中定义的对等结构
  { throw new NotImplementedException(); }
m.OnError += new M.CBOnError(m_OnError);//m是c++cli类M在c#中的实例

错误信息:
错误 1 “m_OnError”的重载均与委托“M.CBOnError”不匹配

(注:除了传递结构体外,换其他类型如ref int等,都正常)

------解决方案--------------------
大概清楚你的意思了,就是
非托管c++ 有个回掉函数,托管c++,把一个c#委托,设置他,
你的方法有些问题,你直接用一个方法设置就完了,何必用event,触发的机制,非托管和托管的事件机制是不一样的
我以前也说过,不管c++隐式invoke 还是c#的显示invoke,都要通过封送,也就是说双方都要详细了解二者的内存布局。
既然要用clr做封装,就要封装好,因为c#没有隐式封送,不要让c#这边看到一点非托管的东西