无法将类型'System.Windows.Controls.WebBrowser'转换为'SHDocVw.DWebBrowserEvents'

时间:2011-08-08 09:06:22

标签: c# wpf

我在网站上看到了一个例子 http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser%28v=VS.90%29.aspx

他们在这里使用如下声明:

 SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
            SHDocVw.DWebBrowserEvents2_Event wbEvents2 = (SHDocVw.DWebBrowserEvents2_Event)myWebBrowser2;

当我编译程序时,我收到以下错误。我错过了什么吗?

无法将'System.Windows.Controls.WebBrowser'类型转换为'SHDocVw.DWebBrowserEvents'

1 个答案:

答案 0 :(得分:3)

该异常告诉您myWebBrowser2的类型为'System.Windows.Controls.WebBrowser'。但是在示例中,它的类型为“SHDocVw.IWebBrowser2”。您似乎跳过了从WPF WebBrowser控件中提取IWebBrowser2的部分(在此示例中,'myWebBrowser'是您的WebBrowser控件):

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]   
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]  
internal interface IServiceProvider   
{
   [return: MarshalAs(UnmanagedType.IUnknown)]
   object QueryService(ref Guid guidService, ref Guid riid);
}

static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");   
...   
IServiceProvider serviceProvider = (IServiceProvider)myWebBrowser.Document;
Guid serviceGuid = SID_SWebBrowserApp;
Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2) serviceProvider.QueryService(ref serviceGuid, ref iid);
...

然后myWebBrowser2已准备好进行交互。