TOpenDialog bringt Fehler nach mehrmaligen ausführen



  • Hi Leute,

    ich habe folgendes Problem. Ich nutze die Komponente TOpenDialog von Borland.

    Wenn ich diese mehrmals mittels OpenFile->Excecute() aufrufe erfolgt eine Informationsmeldung, wenn ich über eine Datei mit dem Mauszeiger fahre.(Beim ersten Aufruf funktioniert alles so wie es soll)

    Es werden ja dann die Details der Datei angezeigt, jedoch bekomme ich hier dann ein Informationsmeldung und mein Programm funktioniert nicht mehr.

    Hier mein Code:

    Codeausschnitt:

    if(openFile->Execute())
      {
         if(buttonName == "btnOpenOperationSlide")
           lblFileNameOperationSlide->Caption = openFile->FileName;
         if(buttonName == "btnOpenInformationSlide")
           lblFileNameInformationSlide->Caption = openFile->FileName;
      }
    

    Die Datei selber habe ich vorher erzeugt, also ich nutze ein eigenes "Dateiformat".

    Hier noch die Informationsmeldung:

    **
    Project C:\.... faulted with message: 'access violation at 0x7e7015ce: read of address 0x01ac2038'. Process Stopped. Use Step or Run to continue.
    **

    Ich hoffe ich hab mich so ausgedrückt das man mich versteht, was mach ich falsch beim Nutzen des TOpenDialogs?

    Noch ein paar Infos wie ich die Datei speichere. Ich nutze hierzu TFileStream. Speicher mehrere Komponenten in der Datei und das war es auch schon.

    Danke für eure Hilfe!!!



  • arbeitest du mit relativen oder absoltuen Pfaden?
    ansonsten:

    Th schrieb:

    Kann es evtl. mit dem Arbeitsverzeichnis zu tun haben?...
    Der TSaveDialog (bzw. auch TOpenDialog) ändert nämlich das Arbeitsverzeichnis, sofern nicht Options::ofNoChangeDir gesetzt ist.



  • Hi Linnea,

    ich nutze absolute Pfadangaben. Habe die Option::ofNoChangeDir auf true gesetzt. Dann wird ja das Verzeichnis wieder zurück gesetzt.

    Aber leider liegt es nicht daran. Wiederum passiert es das wenn ich den Dialog ein zweites Mal öffne, die Informationsmeldung wieder erscheint.



  • Jetzt werde ich schon threadübergreifend zitiert 😃

    Aber ein Speicherzugriffsfehler sollte ja trotzdem nicht passieren.
    Was sagt denn der Debugger (CallStack)?



  • Hi Th,

    ich kenn mich leider nicht so wirklich mit dem Debugger Tool Call Stack aus. Aber folgendes wird angezeigt.
    -------------------------------------------
    7E7015CE C:\WINDOWS\system32\SHELL32.dll
    7E7DFF9E C:\WINDOWS\system32\SHELL32.dll
    7E7E00E2 C:\WINDOWS\system32\SHELL32.dll
    7E7D96F9 C:\WINDOWS\system32\SHELL32.dll
    7E6A209D C:\WINDOWS\system32\SHELL32.dll
    75F21B9A C:\WINDOWS\system32\browseui.dll
    77F49498 C:\WINDOWS\system32\SHLWAPI.dll
    7C937545 ntdll.dll
    7C937583 ntdll.dll
    7C937645 ntdll.dll
    7C93761C ntdll.dll
    7C80B683 C:\WINDOWS\system32\kernel32.dll
    -------------------------------------------

    Nur wie muss ich das jetzt interpretieren? Hoffe ihr könnt mir helfen.



  • Kommt der Absturz während du den Dialog auf hast, oder erst danach?
    Der CallStack sagt leider wirklich nicht sehr viel aus, außer daß er in den Untiefen von Windows sich befindet -)

    Und dein Satz "Wenn ich diese mehrmals mittels OpenFile->Excecute() aufrufe..." bedeutet der, daß du den Dialog mehrmals hintereinander aufrufst oder aber daß du mittels mehrerer Threads diesen mehrfach öffnest?
    Und letzteres könnte der Grund für den Absturz sein, da ich nicht weiß, inwieweit TOpenDialog multithreading fähig ist.



  • Der Aufruf erfolgt mittels eines ButtonClick Events. Threads sind keine im Spiel. Der Absturz erfolgt, wenn ich über eine Datei gehe und dann eigentlich die Datei-Infos erscheinen müssten.

    Dies passiert wenn ich den Dialog ein zweites Mal öffne. Beim ersten Mal gibt es keinerlei Probleme.

    Wie kann man den Call Stack besser auswerten? Ich bin da echt ein Anfänger und hab damit noch nie gearbeitet.



  • Hallo

    Aus eigener Erfahrung weiß ich das TOpenDialog nicht einfach so abstürzt. Es muß also an deinem Code liegen. Benutzt den Debugger um die genaue Zeile herauszufinden wo der Absturz kommt und was für Werte in den relevanten Variablen steht.
    Aus deinem gezeigtem Code wird jedenfalls kein Absturzgrund klar, also ist es für uns hier nur ein Ratespiel.

    bis bald
    akari



  • Hi akari,

    das ist mir ja auch soweit klar, jedoch erfolgt der Absturz bei keiner Codezeile von mir. Ein Absturz ensteht wenn der Dialog geöffnet ist und ich über eine Datei mit dem Cursor fahre und die Datei-Informationen ausgelesen werden.

    Ich habe es auch schon mit sehr einfachen Code probiert sprich einem Button wenn auf diesen geklickt wird, wird der Dialog geöffnet. Beim zweiten mal klicken entsteht wiederum der Fehler, wenn ich über die Datei fahre.

    Ok, aber merk schon das dies wahrscheinlich ein Problem meines Compilers zu sein scheint bzw. meines Systems, wenn es bei anderen nicht passiert.



  • Ist die Datei, bei der das passiert, ok?
    Ist die auch im Win- Explorer sichtbar? Kann die damit "geöffnet" werden.

    Mach mal try/ catch um den Teil des Programmes mit dem ...->Execute().

    Ev. bleibt das Prog am Catch hängen, dnn kannst Du die Variablen testen.

    Gruss
    Frank



  • Hi Frank,

    also um ersteinmal auf deine Fragen zu Antworten:

    1. Nach meinem Wissen ist die Datei Ok, zumindest kann ich sie mit einem normalen
    Texteditor öffnen und sehe auch den Inhalt den ich dort gespeichert habe.

    2. Die Datei ist auch im Explorer sichtbar

    3. Und ja sie kann damit geöffnet werden, beim ersten öffnen wird alles korrekt
    ausgeführt.

    Nun zu deinem Tipp wo ich dir erstmal sehr dankbar für bin, habe Ihn gleich Umgesetzt nur leider fängt der Catch-Block den Fehler nicht ab. 😞

    Ich weiß leider nicht woran es liegt, aber danke für eure Mühe!


Anmelden zum Antworten