首页 文章

管理的BHO未使用保护模式进行实例化

提问于
浏览
1

我正在使用C#为IE写一个BHO . 我关心的代码是这样的:

public class BHO : IObjectWithSite, IOleCommandTarget
{
    ...
    public BHO()
    {
        MessageBox.Show("Constructor called");
    }

    public int SetSite(object site)
    {
        MessageBox.Show("SetSite called!");
        if( site != null )
        {
            _webBrowser = (WebBrowser) site;
            _webBrowser.NavigateComplete2 += OnNavigateComplete2;
        }
        else
        {
            _webBrowser.NavigateComplete2 -= OnNavigateComplete2;
            _webBrowser = null;
        }
        return 0;
    }

    private void OnNavigateComplete2(object pDisp, ref object URL)
    {
        MessageBox.Show("OnNavigateComplete2 called");
    }

当关闭保护模式运行IE时,一切正常 . 但是,如果启用了保护模式,则会调用NavigateCompleted2(),但从不调用SetSite()和构造函数(!?!) . 但是,如果我创建一个调用BHO类中的方法的菜单项,或者打开一个新选项卡,则会正确调用所有内容 . 当我打开一个新的IE窗口时,有谁知道为什么它不起作用?

完整的源列表可以在here找到 .

1 回答

  • 0

    MSDN上的某个人回答了我的问题:构造函数和方法仍然被调用,但由于某种原因,当我在保护模式下打开一个新窗口时,MessageBoxes不显示,直到加载页面 . 由于不同的问题,变量没有被设置 - 构造函数正在实例化一个静默失败的对象 .

    我现在需要帮助解决另一个问题(very much related) .

相关问题