C#和C相互调用的问题
问题已经解决。。。。
由于是debug信息和error信息。不重要。这里我先吧可变参数的先去掉。
那么这里的
DLL_EXTERN void DLL_API SetPortPoint(pDebug d, pError e, pCanSend c);
就变成了
DLL_EXTERN void DLL_API SetPortPoint(pCanSend c);
我的具体实现是
【C#和C相互调用的问题】 typedef void(*pCanSend)(CAN_PACKET_T *d);
static pCanSend pCanSendHandle =NULL;
DLL_EXTERN void DLL_API SetPortPoint(pCanSend c)
{
\t//pDebugHandle = d;
\t//pErrorHandle = e;
\tpCanSendHandle = c;
}
在DLL的某些地方会
\tif (pCanSendHandle != NULL)
\t\tpCanSendHandle(d);
在C#里面这么写:
//一定要加上这句,要不然C#中的回调函数只要被调用一次,程序就异常退出了!!!
public delegate void pCanSend(ref CAN_PACKET_T d);//搞一个代理
private static extern void SetPortPoint(IntPtr c);//搞一下C的函数
IntPtr fa=new pCanSend(ClrCanSend).Method.MethodHandle.GetFunctionPointer();//获取ClrCanSend的具体函数地址
SetPortPoint(fa);//调用你的c语言DLL 里面的SetPortPoint函数
private void ClrCanSend(ref CAN_PACKET_T d) { Console.WriteLine("ClrCanSend{0}", DateTime.Now); }
推荐阅读
- 江苏■江苏交控坚持问题导向、瞄准职工需求——找准“病灶”当好“产改先行官”
- 贵州在建骨干水源工程达到465座有效解决工程性区域性缺水问题
- 四川眉山瓦屋山景区就游客投诉、停车难等问题公开道歉
- 杭州已整改城市道路无障碍环境问题12467处
- 互联网怎样解决“家政服务上门速度慢”的问题
- 中东问题|
- 中国网汽车|购车2个多月、仅行驶8000多公里 宝骏730遭遇7处问题
- |沛县深入开展教育领域突出问题专项整改
- 交换机,路由器经常性的死机咋办
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
