C/C++函数指针在C#中的调用
1:C中声明**
下面C的源代码,要调用的函数参数中带有函数指针,该函数指针指向一个回调函数。
_LIBAPI void CallFromDll(X x);
void CallFromDll(X x)
{
DevMsg msg;
msg.TagStatus.distance=30;
msg.TagStatus.mode=20;
msg.TagStatus.voltage=8.8;
msg.TagStatus.isMove=10;
msg.TagStatus.isCut=40;
msg.TagStatus.version=11;
//msg.TagStatus.mode=1;
x(msg);
}
对于函数体内的是什么,不重要,关键在于函数指针x,下面是x的声明:
typedef void(*X)(DevMsg msg);
在一些回调函数中,经常碰到这样的封装方式,调用的难点就在于这个函数指针。
2C#中调用
第一步:导入,函数指针用Intptr。
[DllImport("fun_ptr.dll", EntryPoint = "CallFromDll",CallingConvention =CallingConvention.Cdecl), ]
public static extern void CallFromDll(IntPtr fun);
第二步:创建函数委托,委托这个概念理解了好久,最后还是作者把它当成了函数指针。。