Warum stürzt mein Programm bei einer ComboBox ab?
-
Habe folgenden Code:
#define NUMGENRES 80 static char *genres[NUMGENRES] = { "Blues ", "Classic Rock ", "Country ", "Dance ", "Disco ", "Funk ", "Grunge ", "Hip-Hop ", "Jazz ", "Metal ", "New Age ", "Oldies ", "Other ", "Pop ", "R&B ", "Rap ", "Reggae ", "Rock ", "Techno ", "Industrial ", "Alternative ", "Ska ", "Death Metal ", "Pranks ", "Soundtrack ", "Euro-Techno ", "Ambient ", "Trip-Hop ", "Vocal ", "Jazz+Funk ", "Fusion ", "Trance ", "Classical ", "Instrumental ", "Acid ", "House ", "Game ", "Sound Clip ", "Gospel ", "Noise ", "Altern Rock ", "Bass ", "Soul ", "Punk ", "Space ", "Meditative ", "Inst. Pop ", "Instrum. Rock ", "Ethnic ", "Gothic ", "Darkwave ", "Techno-Indus ", "Electronic ", "Pop-Folk ", "Eurodance ", "Dream ", "Southern Rock ", "Comedy ", "Cult ", "Gangsta ", "Top 40 ", "Christian Rap ", "Pop/Funk ", "Jungle ", "Native American", "Cabaret ", "New Wave ", "Psychadelic ", "Rave ", "Showtunes ", "Trailer ", "Lo-Fi ", "Tribal ", "Acid Punk ", "Acid Jazz ", "Polka ", "Retro ", "Musical ", "Rock & Roll ", "Hard Rock " };
und will den in mit folgendem Code in einer ComboBox anzeigen
void CSetTagsForm::OnInitialUpdate() { for(int x = 0; x < NUMGENRES; x++) { m_Combo.AddString(genres[x]); } }
und dann bekomm ich folgedenden Fehler in der afxwin2.inl:
AFXWIN_INLINE int CComboBox::AddString(LPCTSTR lpszString) { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)lpszString); }
weis jetrzt jemand warum mir die scheiße dann immer abschmiert?
hoffe mir kann jamend helfen
-
Ganz einfach, die ComboBox ist zu dem Zeitpunkt wo der Fehler auftaucht noch nicht erzeugt. Füg die Texte doch bei OnInitDialog ein...
[ Dieser Beitrag wurde am 28.12.2002 um 10:51 Uhr von MaSTaH editiert. ]
-
BTW, das tut's übrigens auch
static const char *genres[] = { "Blues ", "Classic Rock ", "Country ", "Dance ", "Disco ", "Funk ", "Grunge ", "Hip-Hop ", "Jazz ", "Metal ", "New Age ", "Oldies ", "Other ", "Pop ", "R&B ", "Rap ", "Reggae ", "Rock ", "Techno ", "Industrial ", "Alternative ", "Ska ", "Death Metal ", "Pranks ", "Soundtrack ", "Euro-Techno ", "Ambient ", "Trip-Hop ", "Vocal ", "Jazz+Funk ", "Fusion ", "Trance ", "Classical ", "Instrumental ", "Acid ", "House ", "Game ", "Sound Clip ", "Gospel ", "Noise ", "Altern Rock ", "Bass ", "Soul ", "Punk ", "Space ", "Meditative ", "Inst. Pop ", "Instrum. Rock ", "Ethnic ", "Gothic ", "Darkwave ", "Techno-Indus ", "Electronic ", "Pop-Folk ", "Eurodance ", "Dream ", "Southern Rock ", "Comedy ", "Cult ", "Gangsta ", "Top 40 ", "Christian Rap ", "Pop/Funk ", "Jungle ", "Native American", "Cabaret ", "New Wave ", "Psychadelic ", "Rave ", "Showtunes ", "Trailer ", "Lo-Fi ", "Tribal ", "Acid Punk ", "Acid Jazz ", "Polka ", "Retro ", "Musical ", "Rock & Roll ", "Hard Rock " }; // Warum hast du in den Anführungszeichen mit Leerzeichen formatiert? // Mach das doch hinter dem " um Speicherplatz zu sparen... void CSetTagsForm::OnInitialUpdate() { for(int x = 0; x < (sizeof(genres) / sizeof(char*)); ++x) m_Combo.AddString(genres[x]); }
Dann brauchst du NUMGENRES nicht immer anzugleichen wenn du ein neues Genre hinzufügst und kannst es dir sogar komplett sparen.
[ Dieser Beitrag wurde am 28.12.2002 um 10:50 Uhr von MaSTaH editiert. ]
[ Dieser Beitrag wurde am 28.12.2002 um 10:52 Uhr von MaSTaH editiert. ]
-
Funktioniert immer noch nicht hab das selbe Problem muss ich dann die Funktion OnInitDailog hinzufügen? Benuzte nämlich ein FormView
-
Könnte auch bei OnCreate gehen. Der zweite Vorschlag von mir war keine Lösung auf dein Problem, sondern nur ein genereller Tip...
[ Dieser Beitrag wurde am 28.12.2002 um 11:36 Uhr von MaSTaH editiert. ]
-
Hab das ausprobiert geht auch nicht mit OnCreate dann stürzt das ding nicht ab ruf die Funktion aber acuh nicht auf;
void CSetTagsForm::() { for(int x = 0; x < (sizeof(genres) / sizeof(char)); ++x) m_Combo.AddString(genres[x]); int iAnzahl = m_Combo.GetCount(); CString strTest; strTest.Format("%d",iAnzahl); AfxMessageBox(strTest); }
da passiert absolut gar nichts!!
Hilfe!!
-
void CSetTagsForm::OnCreate() { for(int x = 0; x < (sizeof(genres) / sizeof(char)); ++x) m_Combo.AddString(genres[x]); int iAnzahl = m_Combo.GetCount(); CString strTest; strTest.Format("%d",iAnzahl); AfxMessageBox(strTest); }
so stimmts
-
void CSetTagsForm::OnCreate() { for(int x = 0; x < (sizeof(genres) / sizeof(char*)); ++x) m_Combo.AddString(genres[x]); int iAnzahl = m_Combo.GetCount(); CString strTest; strTest.Format("%d",iAnzahl); AfxMessageBox(strTest); }
So muss das sein. Du hast die Größe von nem char (1 Byte) und nicht von nem char* (4 Bytes) genommen...
[ Dieser Beitrag wurde am 28.12.2002 um 14:15 Uhr von MaSTaH editiert. ]
-
Geht auch nicht der ruft die Funktion glaub ich noch nicht mal auf!
Weis der Geier warum muss ich an der Funktion irgenwas amchen so dass
diese aufgerufen wird?
-
ok, das könnte jetzt auch völliger blödsinn sein, weil da sollte der compiler einen fehler melden, aber:
wenn du schreibst const char ****genres[NUMGENRES], solltest du dann nicht auch
m_Combo.AddString(&***genres[x]);
schreiben?EDIT: K, das is blödsinn
(warum merk ich das immer erst, NACHDEM ich gepostet habe)
Warum schreibst du eigentlich *genres und nicht genres?
Ich glaub irgendwie, ich sollte mich mal wieder mit Pointern beschäftigen[ Dieser Beitrag wurde am 28.12.2002 um 22:49 Uhr von Chekson editiert. ]
-
Wenn er nur genres schreiben würde, hätte er nur CHAR-Array. Durch *genres gibt es ein Array aus Pointern auf char (-Arrays).
-
wie wärs mit std::string oder CString, da geht sowas ein bissl einfacher.
-
Häääääää, es liegt doch nicht an dem char-Array. Wer bei sowas CString nimmt und nicht char-Arrays hat doch nen Schuss in der Birne...
-
Und kann mir jetzt vielleicht jemand helfen warum das nicht geht?
Soll ich das vielleicht besser anders machen bin für jeden Vorschalg offen!!Helft mir!!
Bitte!