ComboBoxEx und Assertion

stefan-rw

Mitglied
Hallo, ich bin neuling in der c++ programmierung, und möchte in meinem Programm ein erweitertes Kombinationsfeld eisetzen. Die Tut's, zur Benutzung der Imagelisten waren schon schwer zu finden. Jetzt habe ich glaub ich das Problem gelöst, doch jedesmal waenn ich das Programm mit dem Visual Studio kompiliere kommt eine Assertion Fehlermeldung. Was ist das, und wie kann ich die Ausschalten?

Danke für eure HIlfe
Stefan

CFileCoderApp *pApp;
pApp=(CFileCoderApp *)AfxGetApp();
m_imagelist =new CImageList;
ASSERT(m_imagelist != NULL);
m_imagelist->Create(32,32,TRUE,4,4);
m_imagelist->Add(pApp->LoadIcon("test.jpg"));
m_BildBox.SetImageList(m_imagelist);

m_BildBox.AddString("Hallo");
 

vfl_freak

Premium-User
Hallo,

vermutlich ist Deine VAR nicht deklariert - versuch es mal so :
Code:
CImageList *pImageList = new CImageList;
Aber ohne Gewähr ... ;-)

tschüss
Klaus

EDIT: MCoder hat natürlich auch recht! Poste doch die komplette Fehlermeldung und schreib dabei wie und wann sie auftritt !!
 
Zuletzt bearbeitet:

stefan-rw

Mitglied
Danke mal für eure schnellen Antworten... j

Habe jetzt folgendes versucht:
- neues Projekt angelegt (Dialogfeld)
- erweitertes Kombinationsfeld hinzugefügt
- Membervariable (m_cmb) als Control vom Typ CComboBoxEx
- Im OnInitDialog folgenden Eintrag definiert:
m_cmb.AddString("test");

danach über Strg+F5 das Programm kompiliert.

vor Programmstart kam dann die AssertionFehler in der Exe im Modul ...

Als Optionen konnte ich zwischne wiederholen (führt zum Debugger), Abbrechen (zurück zum Visual Studio) und Ignorieren wählen. Ignorieren führt zwar das Programm aus, aber der gewünschte Effekt, das Hinzufügen des Textes, fehlt.

Ich hoffe ihr könnt mir weiterhelfen.

Gruss
Stefan
 

vfl_freak

Premium-User
Hmmm, das habe ich jetzt nicht wirklich verstanden ..... :rolleyes:

Also die ASSERTs können in der Tat nur zur Laufzeit auslösen!
Wieviel ASSERTS hast Du denn in Deinen Code stehen?

Und was ist mit m_cmb? :confused:

Poste mal den kompletten Code und einen ScrShot der Meldung, sonst wird das nix ;-)

Gruß
Klaus
 

stefan-rw

Mitglied
BOOL CTest3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden

// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

m_cmb.AddString("test");


return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

m_cmb ist der Name der Variablen für das ComboBoxEx element.

Assertions habe ich nicht einen im Progammtext
 

stefan-rw

Mitglied
Code:
BOOL CTest3Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
	
	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

		m_cmb.AddString("test");


	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}
 

Anhänge

  • iviewcapture_date_23_10_2008_time_14_47_10.jpg
    iviewcapture_date_23_10_2008_time_14_47_10.jpg
    139,5 KB · Aufrufe: 34

vfl_freak

Premium-User
Hmmm - das ist jetzt aber nicht der Quellcode, der zu dem aus Deinem ersten Post passt ... hier ist ja auch kein ASSERT drin, also kann hier wohl auch kein Assertion-Failure auftreten!

Den findest Du auch NICHT im Quellcode, sondern es ist die anfangs von Dir erwähnte Fehlermeldungsbox! Davon brauchen wir den ScrShot! Und dann halt die die Stelle des Quellcodes, auf den in der Meldung verwiesen wird!

Vielleicht nochmal zur allgemeinen Erklärung:
das Makro ASSERT stelle eine "Zusicherung" dar! In Deinem Fall, das "m_imagelist != NULL" ist! Ist es dann zur Laufzeit doch NULL, dann wird die Programmausführung unterbrochen und die erwähnte Meldungsbox mit "Assertion-Failure" erscheint!

Gruß
Klaus
 

stefan-rw

Mitglied
stimmt, ist nicht der quelltext aus dem ersten Post...

aber ist merkwürdig, dass die Meldung von dem screenshot auftaucht, obwohl kein assertion drin ist. Der Quelltext und die Fehlermeldung aus dem Post gehören zusammen. Sobald ich versuche dem Steuerelement einen Wert zuzuweisen kommt die Fehlermeldung aus dem Screenshot. Auch ohne eine Imagelist. .. An der liegts also nicht.

Die alleinige Anzeige des ComboBoxEx macht keine Probleme.
 

vfl_freak

Premium-User
Ah, jetzt sind wir schon einen Schritt weiter - die Assertion wird innerhalb der Bibliotheksfunktion "afxcmn2.inl" ausgelöst. Dies ist eine inline-Funktion der MFC-Library! Dui findest sie in Dienem VC-Installationsverzeichnis!

Du kannst Dich an solche Stellen immer step für step mit dem Debugger rantasten, damit Du siehst, welche Stelle im Quellcode es denn genau ist - und dann dort analysieren, was schief läuft!

Die genannte Stelle (Z. 277) ist folgendes
Code:
_AFXCMN_INLINE int CComboBoxEx::AddString(LPCTSTR lpszString)
    { UNUSED_ALWAYS(lpszString); ASSERT(FALSE); return CB_ERR;}

Also macht hier Dein AddString Probleme! Kenne diese Funktion jetzt nicht wirklich, aber eventuell musst Du den Parameter anders übergeben - je nachdem, was erwartet wird!

Und mir stellt sich noch immer die Frage, was genau denn nun "m_cmb" ist .....

Gruß
Klaus

EDIT: sorry - erwartet wird natürlich ein LPCTSTR (also const char *), das steht das ja !!
 
Zuletzt bearbeitet: