C/C++内回调函数一般通过传递函数指针来实现,函数指针在C#中对应的就是委托.
// 传入函数指针
typedef void (*FUNC)(int,char*);
JNAAPI bool processCallback(int a,FUNC func);
public delegate void CallbackDelegate(int a,string param); //声明委托
// 接口定义
[DllImport("jnalib.dll", EntryPoint = "processCallback")]
public static extern bool processCallback(int a, CallbackDelegate call);
//调用示例
CallbackDelegate myDelegate = new CallbackDelegate(CallbackFunc); //需要传入回调函数名
processCallback(25, myDelegate); //最好声明委托实例为static,防止垃圾回收器的回收
然后我们就可以在CallbackFunc里面编写回调逻辑了,而JNA回调以interface作为参数,两者相差不大.
// 回调函数 public static void CallbackFunc(int a,string param) { Console.WriteLine("参数1: {0}", a); Console.WriteLine("参数2:{0}", param); }