浏览器帮助程序对象问题:在一台计算机上未调用setsite / getite

时间:2011-07-15 18:56:47

标签: bho

我开发了一个托管浏览器帮助程序对象(BHO)。这适用于除一个以外的所有机器。

我已确保保护模式已关闭,并且此计算机上的UAC也已关闭。

这台特殊的机器是带有IE 8的Win Vista。

我在GetSite和Setsite中添加了一些调试日志和消息框。我没有看到这些日志或消息框。我假设这些因某些原因没有被调用。

有没有更好的方法来调试我的问题?

由于

1 个答案:

答案 0 :(得分:5)

当我输入错误的COM对象GUID时,它就发生了。在'必须'接口'IObjectWithSite'中,定义必须如下:

/// <summary>
/// Interface to hook into IE
/// </summary>
[
    ComImport(), 
    ComVisible(true),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
    Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352") // Defined here: http://msdn.microsoft.com/en-us/library/aa768186(v=vs.85).aspx
]
interface IObjectWithSite
{
    /// <summary>
    /// Function will register our program with actual browser
    /// </summary>
    /// <param name="pUnkSite"></param>
    /// <returns></returns>
    //[PreserveSig]
    void SetSite([In, MarshalAs(UnmanagedType.IUnknown)] object pUnkSite);

    /// <summary>
    /// Callers invoke this to retrieve the container site previously sent to SetSite().
    /// This implementation handles the return of appropriate HRESULT per the
    /// documented interface requirements for IObjectWithSite.
    /// </summary>
    /// <param name="riid">GUID for the interface requested of the site object</param>
    /// <param name="ppvSite">Fill this with the site object if we find the interface through QI call</param>
    void GetSite(ref Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppvSite);

}//interface close

但是,因为你很难过,只有一台机器不支持它......