AddFavorite не работает при реализации IShellUIHelper в c # - PullRequest
0 голосов
/ 18 октября 2011

Я строю аддон IE и хочу быть "внешним" объектом.поэтому я использую SetUIHandler, чтобы установить свой класс как UIHandler.

Я реализую IDocHostUIHandler (ссылаясь на элементы управления Microsoft Internet (COM-объект)), а в GetExternal я возвращаю свой класс:

public void GetExternal(out object ppDispatch)

{

    ppDispatch = this;

}

Это прекрасно работает.любой другой вариант мне не интересен, поэтому мне нужно вернуть E_NOTIMPL.

например:

public void TranslateAccelerator(ref tagMSG lpmsg, ref Guid pguidCmdGroup, uint nCmdID)

{

    Marshal.ThrowExceptionForHR((int)WinAPI.HRESULT.E_NOTIMPL);

}

прекрасно работает, но мне также нужно реализовать IShellUIHelper (IE ожидает его от UIHandler),

, а затем, когда я реализую добавить в избранное:

public void AddFavorite(string URL, ref object Title)
{
    Marshal.ThrowExceptionForHR((int)WinAPI.HRESULT.E_NOTIMPL); 
}

это не работает (JS получил и ошибка).

, когда я пытался сделать то же самоев C ++ и вернуть E_NOTIMPL в качестве возвращаемого значения, все прекрасно работает:

STDMETHODIMP CMyClass::AddToFavoritesBar(BSTR URL, BSTR Title, VARIANT *Type)
{
    return E_NOTIMPL;
}

Я также попытался заменить Marshal.ThrowExceptionForHR((int)WinAPI.HRESULT.E_NOTIMPL); на throw new COMException("", (int)WinAPI.HRESULT.E_NOTIMPL);, и он все еще не работает.

можеткто-нибудь помочь мне с этим?

Спасибо,

Омри

1 Ответ

1 голос
/ 19 октября 2011

Вам необходимо передать вызовы членам IShellUIHelper и IShellUIHelper2 в вспомогательный объект оболочки UI во внешнем объекте.

Javascript вызывает членов вашего внешнего объекта через IDispatch, поэтому вам нужно убедиться, что вы правильно реализовали Invoke и GetIDsOfNames. С точки зрения программирования управляемого кода это означает, что вам нужно иметь правильную сигнатуру метода в вашем классе и добавить правильный [DispId] к вашим методам.

В проекте csexwb2 есть объявление IShellUIHelper, которое вы можете использовать в качестве справочного.

...