日期:2014-05-18  浏览次数:20891 次

c#调用sdk时,求教回调函数如何处理
我现在需要调用一个设备的sdk,里面有个函数用了回调函数,我查了些资料,也用了委托,可能我写错了,
不知道如何才能取得函数返回的数据。
函数如下:
int __stdcall tltmStartReadingItems(HANDLE hHandle, unsigned int uiFieldsMask, BOOL boSetEAS, 
void (__stdcall *lpfnRawCallBack)(HANDLE hHandle, int iReasonForCall, struct tltmRawItem *myRawItem, void *pParam),
 void (__stdcall *lpfnCallBack)(HANDLE hHandle, int iReasonForCall, struct tltmItem *myItem, void *pParam), void *pParam)

哪位大哥指点一下小弟,谢谢!

------解决方案--------------------
回调函数用.NET中的委托处理
比如SDK中有个查找所有窗口的函数:
[DllImport("user32")]
private static extern bool EnumWindows(DelegateEnumWindow ew, int lParam);
上面的参数ew就是一个委托(回调函数),再看这个参数的声明:
delegate bool DelegateEnumWindow(IntPtr hWnd, int lParam);

再看调用:
DelegateEnumWindow dew = new DelegateEnumWindow(CallBackProc);//实例化委托
EnumWindows(dew, 0);//调用API

再看CallBacProc的定义:
private bool CallBackProc(IntPtr hWnd, int lParam)
 {
//在这里实现自己的查找逻辑,比如窗口的类名为XXXXX.
StringBuilder sb = new StringBuilder(256);
GetWindowText(hWnd, sb, sb.Capacity);
if(sb.ToString() == "XXX")

Console.WriteLine(" 找到了"); return true;
}
return false;
}

CallBackProc函数是由系统自动调用(调用者是EnumWindows函数),而不是由程序员调用