private void button2_Click(object sender, EventArgs e)
 {
            //DecCBFun: 为委托
            dcbf = new HikPlayer.DecCBFun(DecCBFun1);
            bool b22 = HikPlayer.PlayM4_SetDecCallBack(1, dcbf);
  }
    当执行到     bool b22 = HikPlayer.PlayM4_SetDecCallBack(1, dcbf);的时候未能调用回调函数   
   //要调用的回调函数
  public static void DecCBFun1(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, int nReserved1, int nReserved2)
 {
             
 }
请大家帮帮忙。

解决方案 »

  1.   

    把PlayM4_SetDecCallBack方法,贴出来看看,没有代码不好帮你分析;要么你断点调试下,看看是什么原因。
    下面是一个小的例子,你可以参考下:        private delegate void DGShow(String message);
            private void Show(String message)
            {
                Console.WriteLine(message);
            }        private void Call(DGShow show)
            {
                show("hello");
            }        private void button1_Click(object sender, EventArgs e)
            {
                DGShow dg = new DGShow(Show);
                Call(dg);
            }
      

  2.   

    单看上面的代码,貌似没有什么问题,我觉得问题可能出在 PlayM4_SetDecCallBack 上,你仔细看看这个方法实现上有没有什么蛛丝马迹的问题~~
      

  3.   

    感觉是PlayM4_SetDecCallBack函数调用的时候,由于没有满足某些条件而没有调用回调的检查一下参数,代码。
      

  4.   

    PlayM4_SetDecCallBack函数是从C++中翻译过来的一个接口。 如下就是PlayM4_SetDecCallBack函数[DllImport("PlayCtrl.dll")]
    public static extern bool PlayM4_SetDecCallBack(int nPort, DecCBFun dcbf); 
      

  5.   

    C++ : void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
    C# : void DecCBFun(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, int nReserved1, int nReserved2);
      

  6.   

    C++ : void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
    C# : void DecCBFun(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, int nReserved1, int nReserved2);
      

  7.   

    [code=C++]
    // 这个函数定义怎么这么奇怪?
    void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
    // 返回值类型是:void
    // 函数参数是:"long nPort......long nReserved2"
    // 请问函数名是什么?(CALLBACK* DecCBFun)?
    // 是不是问题出在这里?
    [/code]
      

  8.   

    HikPlayer.PlayM4_SetDecCallBack(1, dcbf)
    从函数名来看,像是仅仅设置了一个回调函数,可能没有执行
    楼主再检查一下dll说明
      

  9.   


    那 CALLBACK* 是什么?你确定 (CALLBACK* DecCBFun) 直接转成 DecCBFun 正确?