第一次用C#,现在用C#写一个界面,C++做了一个COM对象。现在打算C++的COM对象在执行过程中需要向C#界面push信息,故打算采用托管的方式实现。因此可以分为以下步骤:
1. C#将托管的函数传递给C++对象;如定义delegate GetMsg(string),传递时:comobj.InitCallBack(new GetMsg(func))
2. C++ COM对象将信息不断PUSH过来,即调用该函数pFunc(string);
但现在遇到了一个问题:C++中定义函数指针很容易,传递的函数指针的时候可以用void* 或是long* 只需要类型转换就行了。但C++定义COM接口InitCallBack()是参数怎么定?定成long型的话C#如何将函数参数赋值?初用C#,问题指不定就有错误,还望不吝赐教!!
1. C#将托管的函数传递给C++对象;如定义delegate GetMsg(string),传递时:comobj.InitCallBack(new GetMsg(func))
2. C++ COM对象将信息不断PUSH过来,即调用该函数pFunc(string);
但现在遇到了一个问题:C++中定义函数指针很容易,传递的函数指针的时候可以用void* 或是long* 只需要类型转换就行了。但C++定义COM接口InitCallBack()是参数怎么定?定成long型的话C#如何将函数参数赋值?初用C#,问题指不定就有错误,还望不吝赐教!!
以IntPtr传递
public delegate void GetMessage(string strMsg);GetMessage myFunc= new GetMessage(AddString);
IntPtr pFunc = Marshal.GetFunctionPointerForDelegate(myFunc);
comOjb.InitCallBack( ref pFunc);是这种写法吗?
那C++那边定义什么类型的参数来对应IntPtr