Assertion Failed: afxwin2.inl Line 678



  • Hallo,

    ich habe hier ein schwerwiegendes Problem:

    ich habe 2 * CCombobox (m_room;m_device) und 1 *Listbox(m_list).
    Nebenbei benutze ich noch eine selbsterstellte DLL, die eine Sprachfunktionalität für die 3 Elemente bereitstellt.
    In der DLL habe ich die Klassen MComboBox(mroom,mdevice) und MListbox(mlist), denen ich die Zeiger der jeweiligen Elemente m_room,m_device und m_list übergebe, damit sie darauf zugreifen können.

    In meiner Applikation habe ich folgendes:

    void CApplikationDlg::OnSelchangeCombo2() 
    {
    	// TODO: Add your control notification handler code here
    	m_room.ShowDropDown(false);
    	mdevice.DeleteAll();
    	mlist.DeleteAll();
    	m_list.get
    	switch (m_room.GetCurSel())
    	{
          case 0:  // No filter
            mdevice.AddString(_T("1\0"),_T("2.146 Kaffeeautomat"));
            mdevice.AddString(_T("2"),_T("3.333 Testautomat"));
    		m_device.SetCurSel(0);
    
            // Set default device
    
            break;
    
    	  case 1:  // 2.146
           mdevice.AddString(_T("1"),_T("2.146 Kaffeeautomat"));
    	  	m_device.SetCurSel(0);
    		// Set default device
    
            break;
    
    	  case 2:  // 3.333
           mdevice.AddString(_T("1"),_T("3.333 Testautomat"));
    	  	m_device.SetCurSel(0);
    		// Set default device
    
            break;
    
          default:
            break;
        }
    }
    
    void CApplikationDlg::OnSelchangeCombo1() 
    {
    	// TODO: Add your control notification handler code here
    	m_device.ShowDropDown(false);
    	mlist.DeleteAll();
    
    	// Delete all items from the listbox...
    
        	// ### Function List ###
    	if ((m_room.GetCurSel()==0 && m_device.GetCurSel()==0) || 
    		m_room.GetCurSel()==1) {
    	   mlist.AddString(_T(" 1"),_T("Einschalten\0"));
    	   mlist.AddString(_T(" 2"),_T(" Ausschalten\0"));
    	   mlist.AddString(_T(" 4"),_T(" Heißes Wasser\0"));
    	   mlist.AddString(_T(" 5"),_T(" Cappuccino\0"));
    	   mlist.AddString(_T(" 6"),_T(" Latte Macchiato\0"));
    	   mlist.AddString(_T(" 8"),_T(" Milchkaffee\0"));
    	   mlist.AddString(_T(" 9"),_T(" Milchschaum\0"));
    	   mlist.AddString(_T("10"),_T(" Cafe Creme\0"));
    	   mlist.AddString(_T("11"),_T(" Espresso\0"));
    	   mlist.AddString(_T("13"),_T(" Tasse Kaffee\0"));
    	   mlist.AddString(_T("14"),_T(" Kanne Kaffee\0"));
    	}
    
        if ((m_room.GetCurSel()==0 && m_device.GetCurSel()==1) || 
    		m_room.GetCurSel()==2) {
    
           mlist.AddString(_T(" 1"),_T(" Funktion 1\0"));
    	   mlist.AddString(_T(" 2"),_T(" Funktion 2\0"));
    	   mlist.AddString(_T(" 4"),_T(" Funktion 4\0"));
    	   mlist.AddString(_T(" 5"),_T(" Funktion 5\0"));
    	   mlist.AddString(_T(" 6"),_T(" Funktion 6\0"));
    	   mlist.AddString(_T(" 8"),_T(" Funktion 8\0"));
    	   mlist.AddString(_T(" 9"),_T(" Funktion 9\0"));
    	   mlist.AddString(_T("10"),_T(" Funktion 10\0"));
    	   mlist.AddString(_T("11"),_T(" Funktion 11\0"));
    	   mlist.AddString(_T("13"),_T(" Funktion 13\0"));
    	   mlist.AddString(_T("14"),_T(" Funktion 14\0"));
    	   mlist.AddString(_T("15"),_T(" Funktion 15\0"));
    	   mlist.AddString(_T("16"),_T(" Funktion 16\0"));
    	   mlist.AddString(_T("18"),_T(" Funktion 18\0"));
    	   mlist.AddString(_T("20"),_T(" Funktion 20\0"));
    	}
    }
    

    Beim Start funktioniert auch alles wunderbar, aber wenn ich

    void CApplikationDlg::OnSelchangeCombo2()
    

    aufrufe, kommt die Meldung "Assertion Failed: afxwin2.inl Line 678"
    Instanziert sind auf jeden Fall alle Elemente und gefüllt werden auch alle Elemente.
    Wo liegt das Problem?

    Viele Grüsse
    lukesky24



  • 1. m_list.get ... was ist das?
    2. Debug doch mal und setz mal Breakpoints um zu gucken WO er rausfliegt...



  • zu 1.: zeile muss raus,hab ich versehentlich eingefügt
    zu 2.: debuggen geht nicht, da dies MS embedded 4.0 ist, und die Kommunikation aufgrund der DLL nicht richtig funktioniert.

    rausfliegen tut er aber an der Stelle mlist.DeleteAll() ganz oben, der aufruf weiter unten mit mlist.DeleteAll() funktioniert dagegen einwandfrei.



  • Mich iritiert, dass du mlist und m_list usw. hast.



  • mlist ist ein eigenes Objekt, welches einen Zeiger auf m_list übergeben bekommt und teilweiße Funktionen von CListBox "überschreibt", um das Element für Sprachsteuerung zu erweitern. Schöner wäre eigentlich eine Vererbung der Klasse CListbox gewesen. Da dies aber zur Demonstration eines Konzepts dient und allgemeingültig sein soll und nicht alle Programmiersprachen Mehrfachvererbung unterstützen, habe ich das hier nicht gemacht.

    Mein Problem habe ich gerade gelöst:
    Bei einem Speicherüberlauf in einer Funktion von mlist wurde mit der Zeit der Zeiger auf m_list überschrieben.

    Also trotzdem vielen Dank

    Grüsse
    lukesky22


Anmelden zum Antworten