我正在构建一个 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);
,它仍然不起作用。
任何人都可以帮助我吗?
谢谢,
暗里