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; }
其他方法也是如此。