返回首页

试图读取或写入受保护的内存。大家好,

我工作的一个示例应用程序,在我捕捉到一个形式呈现内容的图像RGB数据。

此应用程序需要调整护理的网页浏览器安装到适当的高度和宽度的分辨率或颜色时系统中的深刻变化。

我使用IViewObject.Draw funtion捕获的内容和LockBits得到扫描的指针。样品片段如下。

    [ComImport, Guid("0000010D-0000-0000-C000-000000000046"), InterfaceType((short)1), ComConversionLoss]

    public interface IViewObject

    {

        void Draw([MarshalAs(UnmanagedType.U4)] UInt32 dwDrawAspect,

                  int lindex,

                  IntPtr pvAspect,

                  [In] IntPtr ptd,

                  IntPtr hdcTargetDev,

                  IntPtr hdcDraw,

                  [MarshalAs(UnmanagedType.Struct)] ref _RECTL lprcBounds,

                  [In] IntPtr lprcWBounds,

                  IntPtr pfnContinue,

                  [MarshalAs(UnmanagedType.U4)] UInt32 dwContinue);

    }

.....

Object docObj;

IViewObject iView = null;

IntPtr srcPtr;

BitmapData srcData = null;

bitmap = new Bitmap(width, height, pixelFrmt);

srcArea = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

docObj = (Object)webBrowser.Document.DomDocument;

iView = docObj as IViewObject;

 

iView.Draw(1, -1, (IntPtr)0, (IntPtr)0, (IntPtr)0,

                        (IntPtr)hdc, ref bounds, (IntPtr)0, (IntPtr)0, 0);

 

srcData = bitmap.LockBits(srcArea, ImageLockMode.ReadOnly, pixelFrmt);

srcPtr = srcData.Scan0;

这是正常的大部分时间。但对changin分辨率或颜色深度,上几次iView.Draw的给出了下面的异常
"尝试读取或写入受保护的内存,这通常指示其他内存已损坏。"
堆栈跟踪:
在IViewObject.Draw(lindex的Int32 UInt32的dwDrawAspect,pvAspect的IntPtr,IntPtr的PTD,hdcTargetDev的IntPtr,IntPtr的hdcDraw,_RECTL lprcBounds,IntPtr的lprcWBounds,pfnContinue IntPtr的,dwContinue UInt32的)

我不能够理解这个原因。 ,我TREID谷歌,但这个问题没有得到任何有用的线索。

在理解这个问题的任何帮助非常感激。

在此先感谢。

[编辑]代码块补充说,"对待我作为纯文本的内容......"选项​​禁用 - OriginalGriff [/编辑]

回答

评论会员: 时间:2
I