1

我目前正在用 C# 开发一个 IE 工具栏按钮,它应该能够获取当前选项卡的内容并使用它。但是,每当单击按钮时,都会调用 IObjectWithSite.SetSite 函数(我的代码将在最后发布)并返回以下错误:

无法将类型为“System.__ComObject”的 COM 对象转换为接口类型 SHDocVw.IWebBrowser2”。此操作失败,因为对具有 IID 的接口的 COM 组件上的 QueryInterface 调用

该功能在加载站点时正常工作,但仅在单击工具栏中的按钮时才会引发此错误。如前所述,调用 SetSite 函数,然后调用 IOleCommandTarget.Exec 函数。

所以,我想我的问题是:我如何转换传递给 SetSite 函数的对象,以便我可以访问 Internet Explorer 当前打开的选项卡上的文档?

我目前对这两个功能的相关代码如下:

int IObjectWithSite.SetSite(object site)
{
    String display = "";

    try { browser = (IWebBrowser2)site;}
    catch (Exception e) { display += e.Message + "\r\n"; }

    System.Windows.Forms.MessageBox.Show(display);

    return 0;
}


int IOleCommandTarget.Exec(IntPtr pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
{
    if (form == null)
    {
        form = new SomeForm();
        form.InputText = "";
    }
    form.ShowDialog();
    return 0;
}

提前致谢。

4

2 回答 2

1

从工具栏按钮站点查询 IWebBrowser2的记录方法是从站点查询 IServiceProvider,然后查询 IID_IWebBrowserApp 的 QueryService

于 2011-05-20T20:53:30.680 回答
0

Exec 函数在实际执行之前调用 SetSite。为了解决这个问题并且仍然让 Exec 函数能够访问有关浏览器的信息,SetSite 和 GetSite 函数应该存在于 Exec 函数访问的单独类中。

于 2011-05-30T20:38:46.303 回答