Проблема с объектом Browser Helper: setsite / getsite не вызывается на одной машине - PullRequest
2 голосов
/ 15 июля 2011

Я разработал управляемый объект помощника браузера (BHO). Это работает на всех машинах, кроме одной.

Я удостоверился, что защищенный режим выключен, и UAC также выключен на этом аппарате.

Эта конкретная машина - Win Vista с IE 8.

Я добавил несколько журналов отладки и окно сообщений в GetSite и Setsite. Я не вижу эти журналы или окно сообщения. Я предполагаю, что они не вызваны по какой-то причине.

Есть ли лучший способ отладить мою проблему?

Спасибо

1 Ответ

5 голосов
/ 29 января 2012

Как только это произойдет со мной, когда я введу неправильный идентификатор GUID COM-объекта.В интерфейсе 'must-have' '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

Но, к сожалению, только одна машина не поддерживает его ...

...