Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导航到google后,CDHtmlDialog在导航到pdf时崩溃_Html_Visual C++_Mfc - Fatal编程技术网

导航到google后,CDHtmlDialog在导航到pdf时崩溃

导航到google后,CDHtmlDialog在导航到pdf时崩溃,html,visual-c++,mfc,Html,Visual C++,Mfc,从www.google.com页面导航到pdf文件,导致CDHtmlDialog中出现异常。 从google以外的页面(如www.wikipedia.org)导航时不存在此异常 已重写“OnBeforeNavigate”、“OnNavigateComplete”和“OnDocumentComplete”事件。然后发现,在问题场景中,加载pdf文件时“OnNavigateComplete”被调用了两次。 调用顺序如下:OnBeforeNavigate=>OnNavigateComplete=>On

从www.google.com页面导航到pdf文件,导致CDHtmlDialog中出现异常。 从google以外的页面(如www.wikipedia.org)导航时不存在此异常

已重写“OnBeforeNavigate”、“OnNavigateComplete”和“OnDocumentComplete”事件。然后发现,在问题场景中,加载pdf文件时“OnNavigateComplete”被调用了两次。 调用顺序如下:OnBeforeNavigate=>OnNavigateComplete=>OnNavigateComplete

由于调用“OnNavigateComplete”时未调用“OnBeforeNavigate”,CDHtmlDialog中的“m_spHtmlDoc”不会变为NULL,并且验证会导致“CDHtmlDialog::OnNavigateComplete”中的断言。 断言(m_spHtmlDoc==NULL)

标题:

class CClientAppDlg : public CDHtmlDialog
cpp:

  • 为什么两次调用“OnNavigateComplete”并导致异常
  • 为什么只有在从谷歌页面导航时才会发生这种情况

  • 尝试在Internet Explorer中打开该网站。可能存在与MFC无关的错误。感谢您的检查点。Internet Explorer中没有问题。PDF文件来自本地计算机本身。看起来您使用的是PDF插件,我们看不到。显示对话框的其余部分,以及对话框的创建方式。并说明Visual Studio的版本,这可能是相关的。您不需要将
    UpdateData(TRUE)
    放在其中,尽管这不会导致问题
    OnNavigateComplete
    有时会被调用两次,我也不知道为什么,但它不会导致异常。我使用的是VS2017。我创建此应用程序是为了找出问题所在。创建MFC对话框应用程序,并将其基类从CDialogEx更改为CDHtmlDialog。要使用CDHtmlDialog,请包含“afxdhtml.h”文件。用CDHtmlDialog替换cpp文件中CDialogEx的用法。在CDHtmlDialog构造函数中,使用“0”作为第二个参数。这些都显示在代码段中。添加编辑控件以获取URL。“添加”按钮并单击“事件”导航到编辑控件中的URL。首先给出URL为“www.google.com”。然后是“E:\sample.pdf”。我认为IE使用AdobeReader作为插件。谢谢你的评论。
    CClientAppDlg::CClientAppDlg(CWnd* pParent /*=nullptr*/)
        : CDHtmlDialog(IDD_CLIENTAPP_DIALOG, 0, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CClientAppDlg::OnBnClickedNavigate()
    {
        UpdateData(TRUE);
        Navigate(m_csNavURL); // Get URL from edit box and navigate
        UpdateData (FALSE);
    }
    
    void CClientAppDlg::OnBeforeNavigate( LPDISPATCH pDisp, LPCTSTR szUrl)
    {
        CDHtmlDialog::OnBeforeNavigate(pDisp, szUrl);
    }
    
    void CClientAppDlg::OnNavigateComplete( LPDISPATCH pDisp, LPCTSTR szUrl)
    {
        CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);
    }
    
    void CClientAppDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
    {
        CDHtmlDialog::OnDocumentComplete(pDisp, szUrl);
    }