SHFileOperation verursacht, daß Programm in Endlosschleife läuft



  • Hallo,

    ich benutze folgende Funktion um Verzeichnise zu löschen:

    bool __fastcall TForm1::DeleteDir(char *Dir)
    {
    SHFILEOPSTRUCT sh;
    ZeroMemory(&sh, sizeof(sh)); // erstmal alle sh - Member leeren
    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    sh.wFunc = FO_DELETE;
    Dir[lstrlen(Dir)+1] = '\0';  // doppelt Nullterminiert
    sh.pFrom = Dir;
    return SHFileOperation (&sh);
    }
    

    Alles funktioniert prächtig, aber das Programm läuft nach dem Beenden in eine Endlosschleife, wenn diese Funktion einmal zur Laufzeit erfolgreich gestartet wurde. Wo kann das Problem liegen??

    Gruß



  • Sagt der Debugger da nix?
    Die Schleife in der er hängt muss ja irgendne Bedingung haben die weiterhin erfüllt sein muss, da würde ich erstmal schauen 😉



  • Danke für das Interesse.

    Das Programm wird soweit beendet, daß es unter der Windows-Oberfläche nicht mehr sichtbar ist. Unter dem Task-Manager ist aber noch die Task vorhanden.
    Unter dem Debugger des C-Builder wird der C-Quellcode komplett abgearbeitet, und die Kontrolle an Windows zurückgegeben. Stoppe ich dann den Debugger, kann ich noch eine (relativ komplexe) Schleife in Maschinencode verfolgen, was mich nicht wirklich weiterbringt...
    Der Fehler tritt auch nur auf, wenn die Funktion mindestens einmal erfolgreich aufgerufen wurde. Ist das Verzeichnis nicht vorhanden, läßt sich das Programm normal beenden.

    Gruß



  • Ich kenne mich mit dem C-Builder nicht aus und hab kein Plan inwiefern da WinAPI schon gekapselt wird oder ob da eigene Runtimes eingebunden werden.
    Leere Taskleiste, aber .exe taucht im Taskmanager noch auf ist oft ein Zeichen dafür das ein Thread noch am werkeln ist. Kannst du im C-Builder im Debugger die Threads sehen / zwischen den Threads wechseln?



  • Hallo Geeky,

    da ist definitiv noch ein Thread am Laufen. Ich kann ihn auch mit dem Debugger stoppen. Er befindet sich meist bei "KiFastSystemCallRet:", was mir wiederum nichts sagt und läuft im Stepmodus einige hundert Assemblerbefehle durch, bis er wieder dort beginnt. Er läuft auch zwischendurch einige weitere (offensichtlich) Funktionen an, die mir allerdings genausowenig sagen - wenn es hilft, kann ich sie gerne posten.
    Extra eingebunden habe ich nichts - aber es könnte vielleicht damit zusammenhängen daß der verwendete Builder schon etwas betagt ist (Builder 3).

    Was mich schwer wundert ist, daß ich SHFileOperation erfolgreich (auch mehrfach) aufrufen kann, und erst beim Beenden der Fehler auftritt.

    Vielen Dank für Deine Hilfe

    Gruß


Anmelden zum Antworten