【问题标题】:Fatal error on Custom WebBrowser (winforms) code自定义 WebBrowser (winforms) 代码上的致命错误
【发布时间】:2015-05-13 02:08:50
【问题描述】:

在 CustomWebBrowser (winforms) 代码上遇到致命异常。

运行时遇到致命错误。错误地址位于线程 0xf94 上的 0x6c9a60c6。错误代码为 0xc0000005。此错误可能是 CLR 或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户封送错误,这可能会损坏堆栈。

这在安装了 .Net Framework 4.5 的机器上运行良好,但在安装了 .Net Framework 4.0

的机器上却不行>
// constructor
    public AutoCompleteWebBrowserSite(WebBrowser host) :
        base(host)
    {

        // get the CCW object for this
        _unkOuter = Marshal.GetIUnknownForObject(this);
        Marshal.AddRef(_unkOuter);
        try
        {
            // aggregate the CCW object with the helper Inner object
            _inner = new AutoCompleteHelper(this);
            _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner);

            // obtain private WebBrowserSite COM interfaces
            try
            {
                _baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler)  Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated,typeof (WebBrowserNativeMethods.IDocHostUIHandler));
            }
            catch(Exception)
        }
        finally
        {
            Marshal.Release(_unkOuter);
        }
    }

异常在_baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler)Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated,typeof (WebBrowserNativeMethods.IDocHostUIHandler));抛出

还通过在 app.config 文件中禁用 gcConcurrent 来尝试 disabling concurrent garbage collection

任何帮助将不胜感激。

【问题讨论】:

  • 请不要多次发布同一个问题。而是编辑您的原始问题以添加其他信息或在发布新问题之前将其删除。你原来的问题:stackoverflow.com/questions/28981784

标签: c# winforms com webbrowser-control


【解决方案1】:

基本上需要从构造函数中移除所有代码(主要是_baseIDocHostUiHandler)

然后在 WebBrowserSite 实现中,尝试返回每个方法的默认实现值。

   private const int DefaultImpVal = unchecked((int)0x80004001)

  #region IDocHostUIHandler
            int WebBrowserNativeMethods.IDocHostUIHandler.ShowContextMenu(int dwId, ref WebBrowserNativeMethods.Point pt, IntPtr pcmdtReserved, IntPtr pdispReserved)
            {
                return DefaultImpVal ;
            }

int WebBrowserNativeMethods.IDocHostUIHandler.ShowUI(int dwId, IntPtr activeObject, IntPtr commandTarget, IntPtr frame, IntPtr doc)
            {
                return DefaultImpVal;
            }

其他方法也类似。

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多