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#这边看到一点非托管的东西