Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
http://m.c-plusplus.net

  
C++ Forum :: WinAPI ::  SHFileOperation verursacht, daß Programm in Endlosschleife läuft     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
antiriad
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.11.2006
Beiträge: 32
Beitrag antiriad Mitglied 11:41:05 20.04.2012   Titel:   SHFileOperation verursacht, daß Programm in Endlosschleife läuft            Zitieren

Hallo,

ich benutze folgende Funktion um Verzeichnise zu löschen:

C++:
1
2
3
4
5
6
7
8
9
10
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ß
geeky
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 6299
Beitrag geeky Mitglied 13:12:05 20.04.2012   Titel:              Zitieren

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 ;D
antiriad
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.11.2006
Beiträge: 32
Beitrag antiriad Mitglied 13:25:55 20.04.2012   Titel:              Zitieren

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ß
geeky
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 6299
Beitrag geeky Mitglied 14:08:25 20.04.2012   Titel:              Zitieren

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?
antiriad
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.11.2006
Beiträge: 32
Beitrag antiriad Mitglied 19:35:28 20.04.2012   Titel:              Zitieren

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ß
C++ Forum :: WinAPI ::  SHFileOperation verursacht, daß Programm in Endlosschleife läuft   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.