c# – IntPtr到字节数组和返回
参考
How to get IntPtr from byte[] in C#
我试图读取IntPtr引用到byte []然后再返回另一个IntPtr的数据.指针正在引用从扫描仪设备捕获的图像,因此我还假设捕获此信息应放入字节数组中. 我也不确定Marshal.SizeOf()方法是否会返回IntPtr引用的数据大小或指针本身的大小. 我的问题是我收到错误“类型’System.Byte []’不能被编组为非托管结构;没有有意义的大小或偏移量可以计算” IntPtr bmpptr = Twain.GlobalLock (hImage); try { byte[] _imageTemp = new byte[Marshal.SizeOf(bmpptr)]; Marshal.Copy(bmpptr,_imageTemp,Marshal.SizeOf(bmpptr)); IntPtr unmanagedPointer = Marshal.AllocHGlobal( Marshal.SizeOf(_imageTemp)); try { Marshal.Copy(_imageTemp,unmanagedPointer,Marshal.SizeOf(_imageTemp)); Gdip.SaveDIBAs( string.Format("{0}{1}.{2}",CaptureFolder,"Test","jpg"),false); } finally { Marshal.FreeHGlobal(unmanagedPointer); } } catch (Exception e) { Scanner.control.Test = e.Message; } 解决方法
调用
SizeOf 引发的异常是正确的;该方法无法知道传递给它的数组的长度是多少,它只有一个指针.
为此,获取数据的最简单方法是调用静态 至于获取数组的大小,如Anton Tykhyy pointed out in the comments所示,对于Twain.GlobalLock(hImage)的调用正在使用 如果它不是通过调用GlobalAlloc分配的东西的句柄,那么你需要找出Twain模块如何分配内存并使用适当的机制来确定IntPtr指向的内存长度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |