C#调用DLL(C++)及回调函数的问题
在C#调用C++写的DLL,其中DLL的函数包含了一个回调函数的参数,这个回调函数我将它指定给了C#的一个委托函数,代码如下:[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
delegate void CallBackNetProcess(IntPtr pbyData, Int32 iLen);
[DllImport("NetCap.dll", EntryPoint = "NetCap_Open", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern int NetCap_Open(CallBackNetProcess callBackProc); //声明全局静态使其能够不被垃圾回收!
private CallBackNetProcess globalCallbackProcedure;
public void CallBackDataCapture(IntPtr pbyData, Int32 iLen)
{
byte[] bData = new byte[iLen];
Marshal.Copy(pbyData, bData, 0, iLen);
Debug.WriteLine(bData);
}
__________________________________________________________________
初始化调用的地方:
globalCallbackProcedure = new CallBackNetProcess(CallBackDataCapture);
iret = NetCap_Open(globalCallbackProcedure);
if (iret > 0)
{
MessageBox.Show("Open failure!");
}
——————————————————————————————————
以上代码编译是通过了的,执行时也能正常进入回调函数中,完成从网络中接收特定类型的数据,问题是
:即使网络中已经不存在数据包了,程序中回调函数即“CallBackDataCapture”仍然在执行!!一般要持续一段时间后才停止,感觉是数据“pbyData”堆积在缓冲区中没来得及处理似的??
问题出在哪里呢?还望大家帮助一下!!!
非常感激!期盼中…… dll c# c++ 回调函数 --------------------编程问答-------------------- 自己顶,别沉了,咋没人理呢?肯定给分!!! --------------------编程问答-------------------- - - 没弄明白,帮顶了。 --------------------编程问答-------------------- 试试手动把bData释放掉看:
bData = null; --------------------编程问答-------------------- 实际上bData是要放在另一个委托函数中处理的,但是调试时,去掉了对bData的处理也是存在提到的问题,所以觉得搞不定啊! --------------------编程问答--------------------
能说下导致这个问题可能的原因吗?谢谢 --------------------编程问答-------------------- 可能的原因就是你的bData用完没有释放,然后一直累积着到最后垃圾回收机制欻欻欻工作占用时间,所以每次用完手动释放掉也许就不会这样。
这只是可能。 --------------------编程问答--------------------
非常感谢!我再试试!
补充:.NET技术 , C#