当前位置:编程学习 > C#/ASP.NET >>

C#开发过海康威视的进 急急急

调用海康的SDK播放视频时,有时会出现如下异常
检测到 CallbackOnCollectedDelegate
Message: 对“RealDataCallBack::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

程序代码如下

委托定义:   

 public delegate void RealDataCallBack(int lRealHandle, uint dwDataType, [MarshalAs(UnmanagedType.LPArray, SizeConst = 11520)] byte[] pBuffer, uint dwBufSize, uint dwUser);

回调定义:

  private static void SMyRealDataCallBack(int lRealHandle, uint dwDataType, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, uint dwBufSize, uint dwUser)
  {
  }

登陆成功后播放前调用:

播放按钮调用代码如下:

Hik_HCNetSDK.NET_DVR_Init

NET_DVR_DEVICEINFO dev = new RoomWatchClient.NET_DVR_DEVICEINFO();
    
handle = Hik_HCNetSDK.NET_DVR_Login(ServIP, ushort.Parse(Port), UserName, PassWord, ref dev);

  NET_DVR_CLIENTINFO cli = new NET_DVR_CLIENTINFO();
  cli.hPlayWnd = pnlVideo.Handle;//句柄
  cli.lChannel = int.Parse(Channel);
  cli.lLinkMode = 0;
  RealDataCallBack rdc = new RealDataCallBack(SMyRealDataCallBack);
    
  gc2 = GCHandle.Alloc(rdc);
    
  chnRet = Hik_HCNetSDK.NET_DVR_RealPlay(handle, ref cli);
  if (chnRet == -1)
  {
  MessageBox.Show("网络连接失败!");
  return;
  }
  Hik_HCNetSDK.NET_DVR_SetRealDataCallBack(chnRet, rdc, (uint)handle);
  lbPrompt.Text = "视频正在播放!";  

请帮看看怎么解决,谢谢 --------------------编程问答-------------------- 有谁开发过  海康威视啊  交流下好么 --------------------编程问答-------------------- 急死了 --------------------编程问答-------------------- 将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,