Windows Forms WebBrowser控制.net 4.0框架上的错误

我从我的c#代码中抛出致命错误,我在其中定制了表单Web浏览器以支持浏览器自动完成function。 当我们尝试获取WebBrowserSite COM接口时,exception仅在.net 4.0框架上抛出。

error thrown at _baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler) Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated, typeof (WebBrowserNativeMethods.IDocHostUIHandler)); 

码:

  // 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); } } 

这个例外的任何原因和解决方案? 在具有框架4.5的机器上不会发生这种情况。

基本上需要从构造函数中删除所有代码(主要是_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; } 

其他方法也是如此。