![]() |
SHFileOperation: Access Violation in kernel32.dll
hi ihr,
folgender code verursacht bei mir eine AV im modul kernel32.dll:
Delphi-Quellcode:
der pfad existiert garantiert. xml-dateien sind auch enthalten (neben 2 ordnern).
var fos: TSHFileOpStruct;
begin fos.Wnd := application.Handle; fos.wFunc := FO_DELETE; fos.fFlags := FOF_FILESONLY or FOF_SILENT or FOF_NOERRORUI or FOF_NOCONFIRMATION; fos.pFrom := pChar(extractFilePath(paramstr(0))+'working\*.xml'); SHFileOperation(fos); //<-- hier kracht's denn end; benutze ich SHFileOperation falsch oder hat mein system ein problem? :| thanks in advance, aenogym |
Re: SHFileOperation: Access Violation in kernel32.dll
evtl. ein FillChar...
|
Re: SHFileOperation: Access Violation in kernel32.dll
Zitat:
danke für deine antwort, aber... ich verstehe dich nicht ganz ;) ich habe eben mal fos.pFrom mithilfe von FillChar() mit #0 aufgefüllt (so lang, wie mein pfad lang ist). beim testen kam dann lediglich die frage, ob ich alle elemente im papierkorb wirklich löschen möchte... nach einem klick auf "ja" bekam ich eine AV in meiner anwendung und der papierkorb sowie mein ordner sind immernoch gefüllt... :| aenogym |
Re: SHFileOperation: Access Violation in kernel32.dll
1. meint er bestimmt die Struktur fos mit FillChar ordentlich zu initialisieren vorm benutzen.
2. Sehe ich auch vllt. ein Problem in dem PChar, schliesslich bastelst du dir einen neuen String zusamemn mit deinem Konstrukt und lässt dir einen r/o Zeiger auf diesen zurück geben. Das Problem dabei sehe ich darin, das der zusammengebaute String sofort nach dem Zusammenbau nicht mehr verwendet wird und daher seine Gültigkeit verliert und somit auch der PChar. Daher ist der Pfad beim Aufruf schon lange nicht mehr da wo der Zeiger hinzeigt und daher rennt er auf seiner ewigen Suche nach dem Nullbyte zuweit und bekommt eine AV im Kernel. Mal so als andere Vermutung. |
Re: SHFileOperation: Access Violation in kernel32.dll
Moin Steffen,
was mir, ausser der fehlenden Initialisierung von SHFILEOPSTRUTCT noch auffällt: pFrom kann auch eine Liste enthalten, in der die einzelnen Strings durch ein Nullbyte getrennt werden, deshalb muss die Liste mit eine zusätzlichen Nullbyte abgeschlossen werden. Dieses musst Du aber zusätzlich mit angeben, da an einem PChar nur ein abschliessendes Nullbyte hinzugefügt wird. |
Re: SHFileOperation: Access Violation in kernel32.dll
Schau mal hier:
![]() Vielleicht muss Du auch den Flag FOF_NO_CONNECTED_ELEMENTS nutzen, weil bei verknüpften Datenen eine Endlos-Rekursion eintreten kann und dann die AV auftritt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz