其实是海康的DVR的一个录音功能
 /// <summary>
        /// 音频数据回调函数/语音数据回调函数
        ///     void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser)
        ///     注意
        ///         回调参数byAudioFlag=2, pRecvDataBuffer=NULL时,表示语音对讲收发线程退出
        /// </summary>
        /// <param name="lVoiceComHandle">NET_DVR_StartVoiceCom 的返回值</param>
        /// <param name="pRecvDataBuffer">存放数据的缓冲区指针</param>
        /// <param name="dwBufSize">缓冲区的大小,为80的整数倍</param>
        /// <param name="byAudioFlag">数据类型:0-客户端采集的音频数据;1-设备端发送过来的音频数据</param>
        /// <param name="dwUser">输入的用户数据</param>
        public delegate void VoiceDataCallBack(int lVoiceComHandle, string pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser);
 private void fVoiceDataCallBack(int lVoiceComHandle, string pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser)
   {
 //在这里面怎么读取缓冲区
}

解决方案 »

  1.   

    public delegate void VoiceDataCallBack(int lVoiceComHandle, string pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser);
     private void fVoiceDataCallBack(int lVoiceComHandle, string pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser)
       {
     //在这里面怎么读取缓冲区
    }可以尝试这样: 
    1:
    public delegate void VoiceDataCallBack(int lVoiceComHandle, IntPtr pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser);
     private void fVoiceDataCallBack(int lVoiceComHandle, IntPtr pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, uint dwUser)
       {
     //在这里面怎么读取缓冲区
         Marshal.Copy()//从pRecvDataBuffer 读出数据。
    }2:string pRecvDataBuffer改成 byte[] pRecvDataBuffer应该也可以。