none
关于accessviolationexception的异常 RRS feed

  • 问题

  • 我在winform中嵌入了一个webbrowser,在webbrowser指向了一个HTML.主要是用来浏览SVG,但是当我访问 这个Form时就会报accessviolationexception的异常.我已经装了SVGView3.03了.不知道为什么会出现这样的问题,请大侠们帮帮忙,谢谢了.

    HTML中的代码如下:

    <html>
           <body>
                  <div id="divSVG"  style="" width:507px;height:460px;margin:2px; border-right: #339966 2px solid; border-top: #339966 2px solid; border-left: #339966 2px solid; border-bottom: #339966 2px solid;>
                  <embed id='svg' src='http://localhost:8080/oa/tomcat.svg' autostart='true' width='507px' height='460px'>
                  </div>
            </body>
    </html>
    2010年3月19日 2:01

答案

  • 你好!

         关于这个异常,文档中是这样描述的:

          当非托管或不安全代码试图读写未分配或不具有访问权限的内存空间时,就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通 过错误指针的读写操作都会引发访问冲突,所以访问冲突通常指示已经通过错误指针进行多次读写操作,并且内存内容可能已损坏。因此,访问冲突几乎总是指示存 在严重的编程错误。

        我没有这样做过,但是尝试过的同行说这样做会产生很多的问题,具体可以参考:

    http://blog.csdn.net/firefight/archive/2007/03/02/1519413.aspx


    周雪峰
    2010年3月19日 6:38
    版主
  • 没有什么特别的好方案。SVG Viewer 是运行在 IE 安全沙箱上的一个非托管 ActiveX,它具备较高的系统访问权限;相反,在 Windows Forms 上使用的 WebBrowser 控件是运行在托管应用程序域上的非托管 ActiveX (shdocvw.dll),它的安全级别根据设置而不尽相同,这里的访问冲突应该是 SVG Viewer 报的,这说明其应用程序未能在这种应用场景下获得测试。

    两种方法可以解决此问题:

    1、直接用 SVG Viewer ActiveX 控件,不要把它嵌入到 WebBrowser。通过添加 COM 引用可以做到这一点。

    2、等待支持 SVG 的浏览器控件,如 IE 9。


    Mark Zhou
    2010年3月19日 8:29

全部回复

  • 你好!

         关于这个异常,文档中是这样描述的:

          当非托管或不安全代码试图读写未分配或不具有访问权限的内存空间时,就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通 过错误指针的读写操作都会引发访问冲突,所以访问冲突通常指示已经通过错误指针进行多次读写操作,并且内存内容可能已损坏。因此,访问冲突几乎总是指示存 在严重的编程错误。

        我没有这样做过,但是尝试过的同行说这样做会产生很多的问题,具体可以参考:

    http://blog.csdn.net/firefight/archive/2007/03/02/1519413.aspx


    周雪峰
    2010年3月19日 6:38
    版主
  • 谢谢回复,这偏文章我也看到过,希望有人遇到过的大侠给个解决方案。

     

    另外还有一个问题,我在webbrowsr里面包含的HTML放一个input输入框,在窗口每次失去焦点时输入法就回自动切换回英文输入了,有没有办法在失去焦点回来时还是原来的输入法呢?

    2010年3月19日 6:51
  • 没有什么特别的好方案。SVG Viewer 是运行在 IE 安全沙箱上的一个非托管 ActiveX,它具备较高的系统访问权限;相反,在 Windows Forms 上使用的 WebBrowser 控件是运行在托管应用程序域上的非托管 ActiveX (shdocvw.dll),它的安全级别根据设置而不尽相同,这里的访问冲突应该是 SVG Viewer 报的,这说明其应用程序未能在这种应用场景下获得测试。

    两种方法可以解决此问题:

    1、直接用 SVG Viewer ActiveX 控件,不要把它嵌入到 WebBrowser。通过添加 COM 引用可以做到这一点。

    2、等待支持 SVG 的浏览器控件,如 IE 9。


    Mark Zhou
    2010年3月19日 8:29
  • 谢谢mazhou,我这显示svg的代码是写在java的jsp中的,客户端这边只是访问了那个jsp的地址而已,所以第一种方法可能行不通。

    等IE9出来估计还要蛮久的一段时间哦,不知道还有没有别的办法了?

    另外还有一个问题,我在webbrowsr里面包含的HTML放一个input输入框,在窗口每次失去焦点时输入法就回自动切换回英文输入了,这个问题我测试了,其实系统获取的还是原来的输入法,但是不知道为什么输出的确实英文(只是有些输入法有这样的问题,比如陈桥输入法),这个问题也不知道该怎么解决,请大家指教一下。

     

    2010年3月21日 15:18
  • 如果是放在了 JSP 上,您可以利用查看源文件功能直接找到那个 SVG 文件的 URL,然后用 SVG Viewer 打开。

    关于 IE 9,现在已经出来了平台预览版本,今年晚些时候就会发布。

    关于您的输入法问题,描述的不是很清楚,我也没有办法仔细分析问题。但您可以检查 Windows Forms 每个地方的 Ime 设置,看看是不是 None。


    Mark Zhou
    2010年3月23日 9:56
  • SVG这个问题有点奇怪了,周末的时候不知道搞了哪些地方,周一回公司居然可以用了.但是还没有找到是改了哪些地方才生效的..

     

    关于输入法的问题,我就是在webbrowser里面放一个HTML页面,HTML页面中有个输入框,如果用QQ这些输入法再切换窗口之后都还是原来的状态,但是用"陈桥输入法"就不会保存. 我在C#中打断点,获得的是原来的状态(比如我切换到"陈桥输入法",打断点获得的还是"陈桥输入法"),但是打出的字确实英文.

    不知道这样描述能不能看明白.

    2010年3月25日 13:13