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

时间:2023-01-21 03:22:59
调用海康的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 = "视频正在播放!";  

请帮看看怎么解决,谢谢

3 个解决方案

#1


有谁开发过  海康威视啊  交流下好么

#2


急死了

#3


将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。

#1


有谁开发过  海康威视啊  交流下好么

#2


急死了

#3


将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。