Problem bei Lesen aus Binärdatei



  • Dieser Aufruf

    infile.read((char*)cBuff, 8);
    

    ist korrekt. Was genau geht denn nicht? Ignorier mal die Codeguard-meldung.
    Eigentlich sollte auch da hier gehen.

    infile.read(cBuff, 8);
    


  • Das Programm läuft dann (erstmal) ohne Probleme. Das eigentliche Problem ist: Das Projekt mache ich eigentlich in BCB 3, und wenn ich es im BCB3 starten will (oder auch die fertige Anwendung) läuft garnix - <Anwendung> hat ein Problem verursacht / festgestellt und wird geschlossen! Im BCB3 kommt: "EAccessViolation" eh das Hauptfenster angezeigt wird, ignorieren hilft da aber nicht. Also hab ich das Projekt mal BDS2006 mit CodeGuard laufen lassen, um weitere Fehler zu finden. Und dieser war nun der letzte der übrig war. Leider läuft das Projekt im BCB3 immernoch nicht. 😕



  • Dann musst du das Programm auch mal im BCB3 debuggen wo denn der Fehler ist. CodeGuard ist hier nicht unbedingt von Nöten.



  • Ok, habe jetzt mal im BCB3 in den Projektoptionen auf "voll debuggen" gestellt. Wenn ich jetzt auf F9 drücken, kommt wieder die

    "EAccessViolation ... lesen von Adresse 00000000 ..."

    . Ich weiß nicht ob es was zu sagen hat, aber der grüne Pfeil bleibt bei der Zeile stehen:

    ComboBoxPort->Items->Add(s);	// fügt s in Liste ein
    

    Die ComboBoxPort gibt es. s ist ein AnsiString in dem wahlweise noCOM oder COMX steht, wobei X von 1 bis 16 geht. Ich nehme an, es liegt nicht an der Zeile mit dem grünen Pfeil!?



  • Hallo

    Zum Benutzen des Debuggers must du schon mehr als nur ein Häkchen setzen. Hier eine Anleitung.

    bis bald
    akari



  • @akari: ich weiß nicht so ganz genau was du mir sagen willst, aber dass ich einen Haltepunkt setzen könnte, um herauszufinden, ob es an dieser Anweisung liegt... ja, hätte ich noch machen können, ich war wohl etwas voreilig. 😞
    Ich habe nun einen Haltpunkt gesetzt. Die EAccessviolation tritt bei Ausführung o.g. Anweisung auf. Die einzige Variable, die mit der Anweisung zusammenhängt ist s, aber das erwähnte ich ja bereits. s ist an dieser Stelle mit dem String "COM1" gefüllt. Es müsste also einfach ein Eintrag "COM1" der ComboBox hinzugefügt werden... stattdessen EAccessViolation. (Im BDS2006 aber nicht.)

    Edit: Die gelinkte Anleitung finde ich übrigens sehr einsteigerfreundlich! Danke



  • Ich vermute einfach mal, dass der Fehler schon vorher passiert ist. Gehe mal einfach Schritt für Schritt mit dem Debugger durch deinen Code und schau dir die variablen an (hauptsächlich Arrays und Zeiger). Versuche herauszubekommen, ob dort irgendetwas ungültig ist. Wenn dein Code zu groß ist, kommentiere alles raus was nicht unbedingt dafür benötigt wird.



  • Puhh... eigentlich wollte ich jetzt ins WE... Also jage ich nun ein Phantom... Wie soll ich es beschreiben: Die entsprechende Unit/Form wird erst angezeigt, wenn man im Hauptform einen Menüeintrag auswählt (mit ShowModal). Ab wo soll ich denn da schrittweise durchgehen, wenn mir nichtmal das Hauptform angezeigt wird? Richtig von Anfang an? Wo setzt man dann den ersten Haltepunkt? Warum wird die UnterForm/Unit eigentlich schon beim Programmstart erzeugt? Kann ich das FormCreate nicht dahin verschieben, wenn ich den entsprechenden Menüpunkt wähle? 😕


  • Mod

    Hallo

    deinn Zugriff erfolgt in FormCreate (sollte man nicht verwenden !!)

    ComboBoxPort->Items->Add(s);    // fügt s in Liste ein
    

    dann ist der Fehler doch schon gefunden

    Mfg
    Klaus



  • Guten Morgen,

    KlausB schrieb:

    dein Zugriff erfolgt in FormCreate (sollte man nicht verwenden !!) ... dann ist der Fehler doch schon gefunden

    Warum das nicht, da wird doch eine Ereignisbehandlung angeboten? Hast du einen Link bzw. eine Erklärung für mich? Ich werd' gleich mal die Suche ankurbeln...

    Edit: Mir dämmert was... Wenn ich etwas im OnCreate Ereignis mache, dann sind ja die zum entsprechenden Form gehörenden Komponenten noch nicht erstellt, dh. wenn ich auf eine noch-nicht-erstellte ComboBox zugreifen, wird natürlich eine exception geworfen. Bin ich damit auf dem richtig Weg?

    Edit2: Ich habe jetzt mal die OnCreate-Behandlungen geleert und das Prog startet ohne exceptions. Ich werde also Funktionen schreiben, die die gewünschten Initialisierungen vornehmen, wenn alle Create's vollzogen sind... das teste ich jetzt mal.



  • Ja.



  • Was mir aber absolut nicht einleuchten will: warum funktioniert es in dem Prog, aus dem ich die entsprechenden Units übernommen habe? Da wird auch Einiges an Initialisierungen im OnCreate-Ereignis vorgenommen und es werden keine exceptions geworfen, trotz try... catch... 😕



  • Das Problem mit OnCreate ist, dass du eben nicht weißt welche Komponenten schon erzeugt sind und welche nicht. Das ist einer der Gründe, weswegen man OnCreate überhaupt nicht verwenden sollte. Alle Initialisierungen gehören in den Konstruktor. Es gibt da auch irgendwo einen Thread dazu. Ich werde mal suchen.





  • Jo 👍 vielen Dank. Damit ist noch klarer, warum im OnCreate nichts gemacht werden soll, was das Form betrifft, welches gerade erstellt wird.... Weiter im Neuen Thread.


Anmelden zum Antworten