Zum Inhalt springen

Exodus

Mitglieder
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

  1. Dein erstes Programm hat einwandfrei funktioniert, es wurde eben nur schneller beendet als du die Ausgabe lesen kannst. Dies sollte normalerweisse durch das Getch() am Ende verhindert werden, funktioniert aber manchmal aus (mir) unerfindlichen Gründen nicht.
  2. CFile und CArchive sind Klassen, d.h. f und ar sind Klassenobjekte. Über diese Objekte greifst du auf die Funktionen der jeweiligen Klasse zu. Ich selbst habe die Klasse CFileDialog nie benutzt, allerdings liegt die Annahme nahe das der komplette Dateipfad von FileDlg.GetPathName() zurückgegeben wird.
  3. Weil die Dateipfade dann geändert werden müssen. Wenn du aus der IDE startest, müssen die Pfadangaben anhand dem Pfad der Quellcodedateien angegeben werden, wenn du normal startest, anhand der .exe. Die ist nach dem Compilieren ja im Release Ordner, wodurch die alten Pfade nicht mehr stimmen.
  4. Normalerweisse wenn du das DXSDK installierst wirst du gefragt ob du die Debug oder Retailversion von DX installieren willst. Standard ist dabei Debug. Allerdings sollte wenn du Retry drückst VC++ dann starten und ein Dis- assemblierungsfenster anzeigen. Wenn du DX neu installierst sollte das Problem behoben sein.
  5. void CMyDlg::OnSetfocusEdComment() { CRect rect; CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = (rect.bottom + 28); wnd->MoveWindow(rect,TRUE); UpdateWindow(); } Funktioniert bei mir.
  6. Man könnte es auch einfach mit einem '\0' überschreiben...
  7. Exodus

    Problem mit strtok

    Ich verstehe das Problem nicht ganz. Wenn also 3d03 in der Datei steht, benutzt du strSample[] = "3D03". Wenn in der Datei der ASCII-Wert von 3d03 steht, wandelst du 3d03 in den ASCII-Wert von 3d03 um. Ob es dazu eine direkte Möglichkeit gibt weiss ich nicht, gestaltet sich aber denoch nicht als sonderlich schwierig. Du wandelst die Hexadezimale Zahl 3d03 zuerst in ihre Dezimalzahl um (Taschenrechner wenn es immer 3d03 bleibt, oder @Runtime). Das kannst du folgendermassen machen: char strSample[] = "[U]0x[/U]3D03"; // WICHTIG: das '0x' nicht vergessen // wir nutzen die Funktion strtol char *cpEnd; // erklär ich später long l = strtol(strSample,&cpEnd,0); // die Konvertierung l behinhalted nun den Dezimalwert von strSample. Der Pointer cpEnd wird von der Funktion strtol auf den ersten non-numeric char in strSample gesetzt. Das kann zur Fehlererkennung genutzt werden, oder einfach um zu wiessen wo der Konvertierungsvorgang aufgehört hat. Parameter 3 ist der Radix, wenn er auf 0 steht, versucht strtol automatisch zu ermitteln, welche basis die Zahl die im String steht hat. Wenn wir also 0x3D03 benutzen, erkennt strtol anhand des 0x das der Radix 16 (Hexadezimal) ist. (l sollte noch auf LONG_MAX und LONG_MIN geprüft werden, um Überlauffehler auszuschliessen). Nun kann man auf die schmutzige Art und weisse die Dezimalzahl l einem String zuweisen: char strSample[] = l; // böse, aber funktioniert Jetzt kannst du nach dem ASCII-Wert von 0x3d03 in deiner Datei suchen. Theoretisch gibt es noch eine einfachere Methode: strSample[] = "3D03"; unsigned int i; sscanf(strSample,"%2X",&i); i beinhaltet nun den Dezimalwert von 3d03, und man kann ihn wie gehabt um- wandeln. Da jedoch die scanf-Familie sehr Fehleranfällig ist und in vielen Situationen unerwartete Ergebnise liefert, finde ich persönlich die strtol- Methode besser.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...