C#中怎样读取缓冲区中的数据? 函数内部应该能取到 byte[] pBuffer既然是流形式就可以写入文件 FileStream stream=new FileStream(...); stream.Write(pBuffer,...); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从函数申明来看,这是一个回调函数,应该定义为托管模式。在托管模式的函数里,调用完成,就想访问数组试的访问就好了,也不是结构体。写入文件就更好办了。以下为现场编写:FileStream FS = new FileStream("C:\abc.bat", FileMode.Create);FS.Write(pBuffer, 0, pBuffer.Length);FS.Flush();FS.Close(); 都已经是byte[] pBuffer,直接用这个pBuffer就可以了呀 这我就糊涂了pBuffer 是我得到了,现在我要把它保存成一个文件. stream.Write(pBuffer,...);不是就会把pBuffer的内容给覆盖了么? 不是,是把byte[] pBuffer的内容写到文件流中。 还是出错啊,贴代码吧,哪位高手能解决这"千古谜题"?我是让它搞的头大了 [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, uintdwDataType, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, uintdwBufSize, 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(); } 代码说明不了问题,首先得确定你的pBuffer数据是否完整、有效,如果单纯将一个不完整的数据写入文件可能不会导致什么问题,但 你后面的代码 Decode.DycHikSingleThreadDecode.HK_STD_CreateHandle(。) 似乎会用这个输出的数据文件,HK_STD_CreateHandle 的内部处理 可能要求 数据是完整的,如果不是完整的,可能就出现了你所述的问题了` `` 还有 你最上面说的“这个方法中的参数[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,返回的是缓冲区的指针.现在我想要把它从缓冲区读取出来,并且写入文件应该怎样用它呢?”注意你的描述 pBuffer里面的存储的的缓冲区的指针,也就是说它并不是真正在数据,要得到数据,还得这从这些缓冲区中读取数据...结合你自己的情况,仔细检查看看吧! :) TreeNode树控件 关于路径的问题,急!!! ListView 虚拟模式下 无法通过代码设置选中 如何快速有效的读取300M的TIF文件 将水晶报表中的某一单元格内容回传给C#程序 c# pos机打印图片文件 OWC10/11都不能用,只好用OWC9.0,可是多sheet的excel文件的在线编辑和保存怎么办啊~~ NHibernate-----喜欢的顶起来,会用它的,交个朋友 资源方面的问题 C#网页的刷新新消息 我的串口程序能发送,但接收不到(大虾帮忙) 在c#中打印指定路径的pdf文件,难道真没办法了~~~
在托管模式的函数里,调用完成,就想访问数组试的访问就好了,也不是结构体。
写入文件就更好办了。以下为现场编写:
FileStream FS = new FileStream("C:\abc.bat", FileMode.Create);
FS.Write(pBuffer, 0, pBuffer.Length);
FS.Flush();
FS.Close();
pBuffer 是我得到了,现在我要把它保存成一个文件. stream.Write(pBuffer,...);不是就会把pBuffer的内容给覆盖了么?
不是,是把byte[] pBuffer的内容写到文件流中。
[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();
}
“这个方法中的参数[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,返回的是缓冲区的指针.现在我想要把它从缓冲区读取出来,并且写入文件应该怎样用它呢?”注意你的描述 pBuffer里面的存储的的缓冲区的指针,也就是说它并不是真正在数据,要得到数据,还得这从这些缓冲区中读取数据...结合你自己的情况,仔细检查看看吧! :)