Stack Overflow??? bei OnCancel dialog?



  • Hier absturz:

    void CDlgProcess::OnCancel(){
    
    	m_bAbort = true;
    	OnCancel();
    }
    

    Dialog Klasse:

    #pragma once
    
    // CDlgProcess-Dialogfeld
    
    class CDlgProcess : public CDialog{
    	DECLARE_DYNAMIC(CDlgProcess)
    
    	BOOL m_bAbort;			//Abbruch
    
    public:
    	CDlgProcess(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~CDlgProcess();
    
    	//Abbruch Bedingung (Messageloop)
    	BOOL Abort();
    
    // Dialogfelddaten
    	enum { IDD = IDD_PROCESS };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnCancel();
    	//afx_msg void OnBnClickedCancel();
    };
    

    P.S.: ich rufe diese Dialog von einem anderen dialog auf (wenn das ein unterscheid macht) bisher hab ich immer nur dilaog vom hauptfenster aus
    geöffnet!!

    CDlgProcess dlg(this);
    	dlg.DoModal();
    

    jemand ne idEE??



  • was steht in der CDlgProcess::OnInitDialog bzw. unter

    //Abbruch Bedingung (Messageloop)
    BOOL Abort();



  • habe keine (noch keine OnInitDlg) ...

    die Abrot funk sieht so aus:

    //////////////////////////////////////////////////////////////////
    // Abort: Abbruch funktion Abbruchbedingung
    //////////////////////////////////////////////////////////////////
    BOOL CDlgProcess::Abort() {
    
    	MSG msg;
        while (::PeekMessage(&msg, NULL, 
            NULL, NULL, PM_NOREMOVE)) {
            AfxGetThread()->PumpMessage();
        }
        return m_bAbort;
    }
    


  • mach mal

    CDialog::OnCancel();
    

    So Rekursion ohne Abbruchbedingung führt nunmal meist zu nem Stackoverflow 🤡



  • ok sauber... thx;)))


Log in to reply