日志含义ITravelLogStg::TravelTo failed with error 0x80004002

本文关键字:with error 0x80004002 failed TravelTo ITravelLogStg 日志 | 更新日期: 2023-09-27 18:12:50

我有以下两个方法来获取当前的旅行日志条目,并通过调用GetTravelLogEntry方法访问到检索到的日志条目:

    public static ITravelLogEntry GetTravelLogEntry(WebBrowser webBrowser)
    {
        int HRESULT_OK = 0;
        SHDocVw.IWebBrowser2 axWebBrowser = (SHDocVw.IWebBrowser2)webBrowser.ActiveXInstance;
        IServiceProvider psp = axWebBrowser as IServiceProvider;
        if (psp == null) throw new Exception("Could not get IServiceProvider.");
        IntPtr oret = IntPtr.Zero;            
        int hr = psp.QueryService(ref SID_STravelLogCursor, ref IID_ITravelLogStg, out oret);            
        if ((oret == IntPtr.Zero) || (hr != HRESULT_OK)) throw new Exception("Failed to query service.");
        ITravelLogStg tlstg = Marshal.GetObjectForIUnknown(oret) as ITravelLogStg;
        if (null == tlstg) throw new Exception("Failed to get ITravelLogStg");            
        ITravelLogEntry ptle = null;
        hr = tlstg.GetRelativeEntry(0, out ptle);
        if (hr != HRESULT_OK) MessageBox.Show("Failed to get travel log entry with error " + hr.ToString("X"));
        Marshal.ReleaseComObject(tlstg);
        return ptle;
    }
    public static void TravelToTravelLogEntry(WebBrowser webBrowser, ITravelLogEntry travelLogEntry)
    {
        int HRESULT_OK = 0;
        SHDocVw.IWebBrowser2 axWebBrowser = (SHDocVw.IWebBrowser2)webBrowser.ActiveXInstance;
        IServiceProvider psp = axWebBrowser as IServiceProvider;
        if (psp == null) throw new Exception("Could not get IServiceProvider.");
        IntPtr oret = IntPtr.Zero;
        int hr = psp.QueryService(ref SID_STravelLogCursor, ref IID_ITravelLogStg, out oret);
        if ((oret == IntPtr.Zero) || (hr != HRESULT_OK)) throw new Exception("Failed to query service.");
        ITravelLogStg tlstg = Marshal.GetObjectForIUnknown(oret) as ITravelLogStg;
        if (null == tlstg) throw new Exception("Failed to get ITravelLogStg");            
        hr = tlstg.TravelTo(travelLogEntry);
        if (hr != HRESULT_OK) MessageBox.Show("Failed to travel to log entry with error " + hr.ToString("X"));
        Marshal.ReleaseComObject(tlstg);
    }

这里的WebBrowser是一个。net WebBrowser控件。当在TravelToTravelLogEntry方法中调用ITravelLogStg::TravelTo时,我得到一个0x80004002,根据此页,这是一个Interface not supported错误。我做错了什么吗?

日志含义ITravelLogStg::TravelTo failed with error 0x80004002

你正试图导航到旅行日志中的当前条目,这没有多大意义,因为你已经在那里了。我可以重现这个特定情况下的错误,发现它也不是很有帮助。

但是使用除0以外的任何参数作为GetRelativeEntry的第一个参数,然后调用TravelTo,如预期的那样工作。

ITravelLogStg::GetRelativeEntry返回偏移量。正偏移量将在当前项之后返回一个项;一个负偏移量返回当前项之前的项。零返回当前条目。

(来源:MSDN)

尝试修改hr = tlstg.GetRelativeEntry(0, out ptle); -第一个参数指定您想要导航的方向。使用0以外的其他值也可以,例如,您可以使用-1来向后移动一个条目。

我认为你的问题是你传递给TravelTo方法的内容。您是否尝试过传递纯整数值以查看是否可以通过此操作?