Debug Assertion Failed!



  • Ich benutze einen CDialog, auf dem ich verschiedene Elemente platzieren möchte. Einige davon sollen durch Funktionen der Klasse, die von außerhalb aufgerufen werden, ausgeblendet werden.

    // DialogSettings.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "V2.h"
    #include "DialogSettings.h"
    #include ".\dialogsettings.h"
    
    // Globale Elemente
    //CStatic *m_pText_1 = new CStatic;
    
    // CDialogSettings-Dialogfeld
    
    IMPLEMENT_DYNAMIC(CDialogSettings, CDialog)
    CDialogSettings::CDialogSettings(CWnd* pParent /*=NULL*/)
    	: CDialog(CDialogSettings::IDD, pParent)
    {
    }
    
    CDialogSettings::~CDialogSettings()
    {
    }
    
    void CDialogSettings::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CDialogSettings, CDialog)
    
    	ON_BN_CLICKED(IDC_BUTTON_HELP, OnBnClickedButtonHelp)
    END_MESSAGE_MAP()
    
    // CDialogSettings-Meldungshandler
    
    bool CDialogSettings::showElements(int step)
    {
    	//hier tritt das Problem auf
    	CStatic *test = static_cast<CStatic*>(GetDlgItem(IDC_STATIC_TEST));
    	//test->ShowWindow(SW_HIDE);
    
    	switch(step)
    	{
    	case 0:
    		{
    
    			return true;
    		}
    	case 1:
    		{
    			return true;
    		}
    	default: return false;
    	}
    }
    
    void CDialogSettings::OnBnClickedButtonHelp()
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	MessageBox(	"Hier kommt ein sinnloser Hilfetext hin",
    				"Hilfe",
    				MB_ICONINFORMATION);
    }
    

    Die Methode showElements() wird von außerhalb aufgerufen. Ich erhalte die Fehlermeldung "Debug Assertion Failed!". Wenn ich die Zeile

    CStatic *test = static_cast<CStatic*>(GetDlgItem(IDC_STATIC_TEST));
    

    z.B. in den Handler OnBnClickedButtonHelp() schreibe, funktioniert alles wie es soll. Ich vermute mal stark, das hat was damit zu tun, dass die Methode showElements() von außerhalb aufgerufen wird?
    Hat jemand einen Tipp, wie ich showElements() trotzdem aufrufen kann?



  • Und in welcher Funktion schlägt das ASSERT fehl? Das sollte Dir schon einen kleinen Hinweis geben, woran es liegen könnte.


  • Mod

    Ich sehe dunkles in meiner Kristalkugel:
    Man kann showElements nur aufrufen, wenn DoModal bereits aufgerufen wurde. Das heißt am Besten im OnOInitDialog Handler. Nur einfach das Objekt instanziieren und diese Funktion aufrufen geht nicht, da die Fenster nicht erzeugt wurden.



  • Alles klar. Vielen Dank, vor allem für die Erklärung dazu 🙂


Log in to reply