http://tcspecial.iteye.com/blog/1675621
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);
- }