Debug Assertion bei CListBox::AddString()

kogge29

Grünschnabel
Hi,

ich lese aus einer Datei Strukturen aus und will zwei derer Komponenten in einen CString einlesen und mit AddString() in eine CListBox einfügen. Es wird feherfrei kompiliert, allerdings kommt beim Ausführen die Debug Assertion ... File: afxwin2.inl Zeile: 669. Beim Debuggen ist mir aufgefallen, dass m_hWnd von m_list1 (Variable für CListBox) auf 0x0000 gesetzt ist, kannallerdings keinen Schluss daraus ziehen. Was könnte da der Fehler sein?
Vielen Dank für die Hilfe imVoraus.

CODE:
--------
typedef struct tagPVMODUL{ //Definition in Header-Datei
struct tagPVMODUL* pnext;
char hersteller[20];
char typ[20];
int nennleistung;}PVMODUL;
//----------------------------inFunktion
CString HelpString = "";
FILE* pf;

if ((pf = fopen("eigene.kac", "rb")) != NULL) //Öffnen der Datei
{
PVMODUL pvmodul;
while((fread(&pvmodul,sizeof(PVMODUL),1,pf)) > 0)
{
HelpString += pvmodul.hersteller; //Zusammenstellen des Strings
HelpString += ' '; //Trennen durch Leerzeichen
HelpString += pvmodul.typ;


m_list1.AddString(HelpString); ///FEEHHHLEER
// UpdatData(false); // habe ich mit und ohne probiert
HelpString = "";
}
fclose(pf);
}
else ;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
 
Du rufst das AddString auf, bevor die ListBox tatsächlich existiert.

Man bedenke: Alle MFC-Klammerklassen klammern ein echtes HWND. Das bedeutet aber auch, dass wenn die Klasse existiert, das nicht auch für das HWND gilt.

Rufe die Routine frühestens im OnInitDialog einer CDialog-Klasse auf, vorher gibt es die ListBox nicht.
Wenn die ListBox standalone ist, also nur so im Raum schwebt, dann stell sicher, dass du vorher ein Create aufgerufen hast, sonst gibt es die ListBox eigentlich gar nicht.


Nachtrag:
Hab gerade das Ende deines Schnipsels gesehen, das sieht aus, als ob du das bereits im OnInitDialog machst. Dann ist irgendwas schiefgegangen, evtl. konnte die ListBox-Klasse nicht der ListBox zugeordnet werden. Prüfe mal die IDs (das #define und das im Dialog-Editor).
 
Tatsächlich hat folgende Zeile im Konstruktor der Klasse gefehlt:

CListBox m_list1;

Allerdings geht es immernoch nicht.

Habe ich Dich richtig verstanden: ID im Dialog-Editor und in der h- und cpp-Datei der Klasse überprüfen?
 
Ich Idiot!

Hatte folgende Zeile in der InitDialog - Routine auskommentiert:

CDialog::OnInitDialog();

Vielen Dank für die Hilfe.
 
Zurück