函数内部应该能取到 byte[] pBuffer既然是流形式就可以写入文件
            FileStream stream=new FileStream(...);
            stream.Write(pBuffer,...);

解决方案 »

  1.   

    从函数申明来看,这是一个回调函数,应该定义为托管模式。
    在托管模式的函数里,调用完成,就想访问数组试的访问就好了,也不是结构体。
    写入文件就更好办了。以下为现场编写:
    FileStream FS = new FileStream("C:\abc.bat", FileMode.Create);
    FS.Write(pBuffer, 0, pBuffer.Length);
    FS.Flush();
    FS.Close();
      

  2.   

    都已经是byte[] pBuffer,直接用这个pBuffer就可以了呀
      

  3.   

    这我就糊涂了
    pBuffer 是我得到了,现在我要把它保存成一个文件. stream.Write(pBuffer,...);不是就会把pBuffer的内容给覆盖了么?
      

  4.   


    不是,是把byte[] pBuffer的内容写到文件流中。
      

  5.   

    还是出错啊,贴代码吧,哪位高手能解决这"千古谜题"?我是让它搞的头大了
            [DllImport("DycHikSingleThreadDecode.dll")]
            public static extern bool HK_STD_CreateHandle([MarshalAs(UnmanagedType.LPArray)]  byte[] pFileHdrBuffer, uint dwFileHdrSize, uint dwBufferSize, System.IntPtr hHandle);
            [DllImport("DycHikSingleThreadDecode.dll")]
            public static extern bool HK_STD_InputData(System.IntPtr hHandle, [MarshalAs(UnmanagedType.LPArray)] byte[] pDataBuf, uint dwDataBufSize);        private void MyRealDataCallBack(int lRealHandle, uint
    dwDataType, [MarshalAs(UnmanagedType.LPArray)]  byte[] pBuffer, uint
    dwBufSize, uint dwUser)
            {
               //将pBuffer[]缓存中的数据写入流中
                using (FileStream FS = new FileStream("c:\\large.mp4", FileMode.Create))
                {
                    FS.Write(pBuffer, 0, pBuffer.Length);
                    FS.Flush();
                    FS.Close();            }           //以下是实现将pBuffer[]中的内容解码的过程,编译没错,就是报异常!
                System.IntPtr hMedia = new System.IntPtr();
                 hMedia = FileOperate.kernel32.CreateFile("c:\\large.mp4", FileOperate.kernel32.GENERIC_READ, 0, IntPtr.Zero, FileOperate.kernel32.OPEN_EXISTING, 0, IntPtr.Zero);           System.IntPtr hTest = new System.IntPtr();
               hTest = FileOperate.kernel32.CreateFile("c:\\large.pcm", FileOperate.kernel32.GENERIC_WRITE, 0, IntPtr.Zero, FileOperate.kernel32.CREATE_ALWAYS, 0, IntPtr.Zero);            byte[] pBuf = new byte[32 * 1024]; ;//文件头缓冲指针
               
                uint dw = 1024 * 1024;//解码库缓冲大小
                
                FileOperate.kernel32.ReadFile(hMedia, pBuf, 40, dw, 0);            
                System.IntPtr hDec = new IntPtr();//解码库操作句柄            Decode.DycHikSingleThreadDecode.HK_STD_CreateHandle(pBuf, 40, 1024 * 1024, hDec);//@@@@@@@@@@@@此处报异常@@@@@@@@
                while (true)
                {
                 FileOperate.kernel32.ReadFile(hMedia, pBuf, 32 * 1024, dw, 0);            if (dw == 0)
                {
                    break;
                }            Decode.DycHikSingleThreadDecode.HK_STD_InputData(hDec, pBuf, dw);
                Decode.DycHikSingleThreadDecode.HK_STD_SetSkipVideo(hDec, true);//跳过视频数据,即视频数据不去解码            Decode.DycHikSingleThreadDecode.STD_FRAME_INFO stFrameInfo = new Decode.DycHikSingleThreadDecode.STD_FRAME_INFO();            
            }
      

  6.   

    代码说明不了问题,首先得确定你的pBuffer数据是否完整、有效,如果单纯将一个不完整的数据写入文件可能不会导致什么问题,但 你后面的代码  Decode.DycHikSingleThreadDecode.HK_STD_CreateHandle(。) 似乎会用这个输出的数据文件,HK_STD_CreateHandle 的内部处理 可能要求 数据是完整的,如果不是完整的,可能就出现了你所述的问题了`  `` 还有 你最上面说的
    “这个方法中的参数[MarshalAs(UnmanagedType.LPArray)]  byte[] pBuffer,返回的是缓冲区的指针.现在我想要把它从缓冲区读取出来,并且写入文件应该怎样用它呢?”注意你的描述 pBuffer里面的存储的的缓冲区的指针,也就是说它并不是真正在数据,要得到数据,还得这从这些缓冲区中读取数据...结合你自己的情况,仔细检查看看吧! :)