Array zurückgeben
-
Fein - ich weiß ja das ich anstrengend bin

Wenn ihr schon keine Lösung habt, könnt ihr mir dann wenigstens ne Informationsquelle empfehlen, in der ich das nachlesen kann? Es kann doch nicht sein, dass ich alles andere hinbekommen habe, aber ich an dieser Kleinigkeit scheitere.
Und nun bitte nicht http://www.microsoft.com/germany/msdn/ - die wälze ich schon den ganzen Tag

Danke
Grüße
-
hm, hast du auch an den index gedacht, is bissher untergegangen:
BOOL CPPgMailchecker::OnInitDialog() { CPropertyPage::OnInitDialog(); DWORD strVar[10]; for (int i = 0; i < 10; i++){ theApp.glob_prefs->LoadMailIntervalFile(strVar, 10); m_MailReqInterval.SetItemData(i, strVar[i] ); // hier // sollte das nicht gehen caste mal nach DWORD_PTR: // m_MailReqInterval.SetItemData(i, (DWORD_PTR)strVar[i] ); }
-
Ahh: Vielen Dank! Das funzt.

Ich hätte zwar schwören können, dass ich das bereits so (oder so ähnlich) verscuht hatte, aber anscheinend ja nicht.
Fein - vielen Dank.Leider stehen jetzt keine Werte in der ComboBox, aber immerhin gibbet keine Compile-Fehler mehr.
Ich gehe mal davon aus, das die Auslesen-Operation der ini-Datei korrekt läuft, also muß das woanders dran liegen. Aber vielen Dank erstmal. Hab zumindest was gelernt

Gruß
André
-
Hhmm,
ist an der Auslese-Operation doch was falsch?
void CPreferences::LoadMailIntervalFile( DWORD* strVar, size_t arraygroesse ){ if (!PathFileExists(configdir+"mailchecker.ini")){ theApp.glob_prefs->CreateMailIntervalFile(); } if (PathFileExists(configdir+"mailchecker.ini")){ CIni ini; for (size_t i = 0; i < arraygroesse ; i++){ strVar[i] = ini.GetInt("Interval%i"); } } }Wenn die Datei folgendermaßen aufgebaut ist:
[Mailchecker-Intervals] Interval0=5 Interval1=10 Interval2=15 Interval3=20 Interval4=30 Interval5=45 Interval6=60 Interval7=75 Interval8=90 Interval9=120Das sollte doch stimmen, oder? Wieso ist der Verkot der an die ComboBox übergeben wird dann leer?
Das ist auch bestimmt meine letzte Frage zu dem Thema 
Gruß
-
ja du musst da noch was formatieren:
void CPreferences::LoadMailIntervalFile( DWORD* strVar, size_t arraygroesse ){ if (!PathFileExists(configdir+"mailchecker.ini")){ theApp.glob_prefs->CreateMailIntervalFile(); } if (PathFileExists(configdir+"mailchecker.ini")){ CIni ini; CString s; for (size_t i = 0; i < arraygroesse ; i++){ // evtl. musst du den string vorher immer wieder loeschen, ka... s.Format( "%s%d", "Interval", i ); strVar[i] = ini.GetInt("Interval%i"); } } }probier es aus, ich hoffen das funktioniert...

-
Nochmal: Danke für Deine Hilfe
Aber das funktioniert leider auch nicht. Ich hab alternativ versucht, wie geraten, den String zu löschen, aber das hat auch nicht geklappt (oder ich habs falsch gemacht - ka).
Ich häng da jetzt über zwei Tage dran - so langsam hab ich Zweifel, ob es ein einfaches Edit-Control nicht auch getan hätte. Andererseits würde ich das jetzt echt gerne schaffen und begreifen. Das kann doch eingentlich nicht so schwer sein - so mit der MFC im Rücken...
Noch ne Idee?
Ansonsten werde ich spätestens morgen dann auf ein Edit-Control umsteigen. Heute gebe ich mir noch Zeit zum austesten.
MfG
-
hast du dem ini-file auch eine datei zugeordnet??
-
der ini eine Datei zugeordnet?Hhmm - ich bin mir sicher, ob weiß was Du meinst.
Die mailchecker.ini wird halt im Unterverzeichnis "config" des Hauptprogrammes erstellt - und das in jedem Falle. Beim ersten Programmstart eine Reihe solcher Files erstellt und dann die globalen Variablen mit Standardwerten gefüllt - d.h. die ini-Dateien gibt es in jedem Falle. So funzt das im allgemeinen.
Das witzige ist ja, dass der Code zum checken, ob die Werte kleiner 5 sind ja funktioniert. Wenn ich da manuell nen Wert von 2 reinschreibe, wird beim schließen des Programms automatisch die Check...-Funktion aufgerufen (da fehlt noch ne Prüfung, aber da bin ich ja noch nicht) - und die behebt den Eintrag 2 direkt, indem sie das File komplett neu anlegt/überschreibt.
Wenn der Zugriff mit ini.GetInt also alleine klappt, muß das doch auch im Vektor gehen?Ansonsten passiert alles, wie oben im Code ersichtlich.
Sorry, ich glaub ich weiß nicht ganz wie Du das meinst.
-
aso.
ich meinte weil du nur
CIni ini;
schreibst.
ist das CIni eine klasse von dir (konnte nirgens so ne klasse finden...)?
falls ja, zeig die mal her.
-
Okay, kein Problem. Die sind n bissel lang, daher uppe ich die eben auf Webspace:
http://mitglied.lycos.de/neuessternentor/CIni.h
http://mitglied.lycos.de/neuessternentor/CIni.cppDie heißen zwar bei mir nicht CIni, aber das spielt ja keine Rolle - richtig eingebunden sind sie definitiv.
Gruß
-
also wenn du einfach:
CIni ini;schreibst sucht der nach einem ini-file mit dem namen deines projektes
(also z.B. MailProjekt.ini).
du musst ihm also den namen der ini datei mitgeben:// ... CIni ini( "mailchecker.ini", "sektion" ); // datei und sektion beachten // in der for-schleife CString intervall; intervall.Format( "%s%d", "Intervall", 0 ); ... = ini.GetInt( intervall );also die ini dateien sind ja immer so aufgebaut:
[sektion]
Intervall0=123
Intervall1=456[irgendwas]
KeineAhnung=abcusw.
deshalb musst du auch noch eine sektion angeben.
schau deshalb nach, wie dein ini-file aufgebaut ist und gib die
parameter entsprechend im konstruktor von CIni an.
-
Okay, ich weiß was Du meinst und habs auch gemacht.
Alerdings bin ich mir nach 2 Stunden herumprobieren nun sehr sicher, dass es daran nicht liegt. Bei der Check-Funktion, die Prüft, ob einer der Werte kleiner ist als 5 greife ich ja auch erfolgreich drauf zu, ohne dass ich was anders machen müsste. Das kann ich nachprüfen, weil ich ja händisch kleinere Werte eintragen kann (in die mailchecker.ini) - und da er die Datei, wie gewünscht neu schreibt, wenn er einen Wert kleiner 5 findet, kann es das eigentlich nicht sein.
Darüberhinaus legt das Programm ja ne ganze Reihe von Dateien an, manche mit dem Dateityp "ini" andere mit dem Typ "dat" (dat ist dasnn ge-scrambelt, also nicht im Klartext lesbar) - und keine von denen ist irgendwie in der CIni-Klasse erwähnt.
Ich hab jetzt mal das Füllen der Combo-Box nochmal angesehen:
Wenn ich da folgendes eingebe:
BOOL CPPgMailchecker::OnInitDialog() { CPropertyPage::OnInitDialog(); DWORD strVar[10]; for (int i = 0; i < 10; i++){ theApp.glob_prefs->LoadMailIntervalFile(strVar, 10); // NÄCHSTE ZEILE! m_MailReqInterval.SetItemData(m_MailReqInterval.AddString("Interval"+strVar[i]), i ); // m_MailReqInterval.SetItemData(i, (DWORD_PTR)strVar[i] ); } LoadSettings(); Localize(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }Dann hab ich folgendes Ergebnis:
"Interval" steht in der Combo-Box aber nichts dahinter. IMHO ist der Vektor nach wie vor leer. Wieso weiß ich immer noch nicht. Für mich steht außer Zweifel dass ich auf die mailchecker.ini zugreifen kann (wie gesagt, das programm erstellt einen ganzen Haufen Dateien, und keine davon wird irgendwie anders angesprochen, als ich meine mailchecker.ini anspreche.Der Vektor ist leer, weil ich wohl die Daten falsch auslese, aber auf die Daten zugreifen und auslesen kann ich (siehe Check-Funktion). Nur wenn sie in den Vektor kommen geht wohl was schief.
Naja - trotzdem vielen Dank für Deine Hilfe - erlebt man nicht so häufig, dass jemand so viel Geduld. Vielen Dank dafür.
Gruß