日期:2014-05-17  浏览次数:21177 次

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
C#调用OK采集卡问题,卡型号OK_M20A,遇到错误"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"

采集图片
OK32API.okCaptureTo(this.m_handle, OK32Targets.Buffer, 0, 1);
                        OK32API.okGetCaptureStatus(this.m_handle, 1);


//取得图片信息
                    short width; //
                    short height; //
                    int stride;//
                    OK32API.okGetTargetInfo(this.m_handle, OK32Targets.Buffer, 0, out width, out height, out stride);
                    //读取图片数据
                    IntPtr pData = Marshal.AllocHGlobal(stride * height);
                    OK32API.okReadRect(this.m_handle, OK32Targets.Buffer, 0, pData);
                    bmp = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb, pData );
                    bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    Marshal.FreeHGlobal(pData);


出现在Marshal.FreeHGlobal(pData),希望有做过图像卡采集的大神指点一下
c#

------解决方案--------------------
指针地址不对。。你分配内存的时候没把每个像素占用的空间算进去。。。。
------解决方案--------------------
Pdata被破坏,已不是最初的pdata了,看看api的调用约定
------解决方案--------------------
内存问题往往跟指针操作不当有关
------解决方案--------------------
应该是指针有问题.
------解决方案--------------------
dotnet是会自动回收内存的。
在厂家类库里自动分的内存,有可能会在c#中被释放。

------解决方案--------------------
在API初始化、释放这方面看看