我在网站上看到了一个例子 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'
答案 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已准备好进行交互。