Windows .net 4.0 框架上的 Forms WebBrowser 控件错误
Windows Forms WebBrowser control error on .net 4.0 framework
我的 C# 代码抛出了一个致命错误,我在其中自定义了表单 Web 浏览器以支持浏览器自动完成功能。
当我们尝试获取 WebBrowserSite COM 接口时,仅在 .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;
}
其他方法也类似。
我的 C# 代码抛出了一个致命错误,我在其中自定义了表单 Web 浏览器以支持浏览器自动完成功能。 当我们尝试获取 WebBrowserSite COM 接口时,仅在 .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;
}
其他方法也类似。