AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) FindFirstFileEx liefert Error Falscher Parameter?
Thema durchsuchen
Ansicht
Themen-Optionen

FindFirstFileEx liefert Error Falscher Parameter?

Ein Thema von DieDolly · begonnen am 27. Aug 2022 · letzter Beitrag vom 9. Sep 2022
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 21:20
Ich habe gerade ein seltsames Phänomen. Eben habe ich eine Prozedur von FindFirst/FindNext auf FindFirstFileEx/FindNextFile umgeschrieben. Sie hat funktioniert!
Wenn ich diese Funktion jetzt aber aufrufe, gibt es den Fehler "Falscher Parameter". Die lief doch vorhin noch

Das hat mit FindFirst/FindNext immer funktioniert. Was ist intern an FindFirstFileEx anders? Darf man FindFirstFileEx nicht so schnell hintereinander aufrufen?
So rufe ich es auf, der Rest (Prüfen auf . und .. ist Standard. Aber es geht nicht über invalid handle value hinaus.
Delphi-Quellcode:
var
 lhFoundFile: THandle;
 lIndexInfoLevels: FINDEX_INFO_LEVELS;
 lfdStruct: TWin32FindData;
 lIndexSearchOps: TFindexSearchOps;
begin
 // ParentFolder: C:\Projekte\Logdateien\
 // Mask : *.log

 lhFoundFile := THandle(Winapi.Windows.FindFirstFileEx(PWideChar(ParentFolder + Mask), lIndexInfoLevels, @lfdStruct, lIndexSearchOps, nil, 0));
 if (lhFoundFile <> INVALID_HANDLE_VALUE) then
  begin
Bei meinen ersten Tests habe ich immer Resultate bekommen. Mittlerweile bekomme ich gar nichts mehr zurück.

Geändert von DieDolly (27. Aug 2022 um 21:33 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.856 Beiträge
 
Delphi 12 Athens
 
#2

AW: FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 21:53
Hallo,

je nach dem was du eigentlich vorhast gibt's evtl. auch einen Lösungsansatz in System.IOUtils?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 22:03
Die dortigen Lösungen sind alle zu ineffizient.

Mittlerweile funktionierts wohl wieder, neuer Aufruf, keine leeren Variablen mehr
Delphi-Quellcode:
var
 lhFoundFile: THandle;
 lfdStruct: TWin32FindData;
 Index: Integer;
begin
 lhFoundFile := THandle(Winapi.Windows.FindFirstFileEx(PWideChar(ParentFolder + Mask), _FINDEX_INFO_LEVELS.FindExInfoBasic, @lfdStruct, _FINDEX_SEARCH_OPS.FindExSearchNameMatch, nil, 0));
 if (lhFoundFile <> INVALID_HANDLE_VALUE) then
  begin

Geändert von DieDolly (27. Aug 2022 um 22:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.250 Beiträge
 
Delphi 12 Athens
 
#4

AW: FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 22:46
Wieso hattest du im ersten Post nicht alle nötigen Variablen initialisiert?
Wenn dir dann jemand um die Ohren wirft, dass es falsch ist, dann hat er bestimmt Recht.
Und ich möchte fast wetten, dass der Compiler das dir auch versucht hatte zu sagen, also warum höst du nicht auf ihn?

Das Result ist bereits THandle.

lhFoundFile := FindFirstFileEx(PChar(ParentFolder + Mask), FindExInfoBasic, @lfdStruct, FindExSearchNameMatch, nil, 0);
_FINDEX_SEARCH_OPS ist nicht unbedingt nötig, zumindestens nicht, wenn es nicht mit {$ScopedEnums ON} deklariert wurde.




Man mischt NIEMALS statische und compilerabhängige Deklarationen.

ParentFolder und Mask sind bestimmt String. (kein AnsiString oder WideString/UnicodeString)
FindFirstFileEx ist ebenso dynnamisch, gegenüber FindFirstFileExA und FindFirstFileExW.
PWideChar ist fest, ebenso wie PAnsiChar, aber gegenüber dem dynamischen PChar.

Rate mal, warum 2009 so viel Knallte, als Delphi plötzlich von ANSI zu Unicode wechselte.

String -> PChar -> TWin32FindData -> FindFirstFileEx
AnsiString -> PAnsiChar -> TWin32FindDataA -> FindFirstFileExA
WideString oder UnicodeString -> PWideChar -> TWin32FindDataW -> FindFirstFileExW
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Aug 2022 um 22:49 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 23:16
Da steht sehr viel, aber verstanden habe ich nicht was du meinst.
Soll das so sein?
lhFoundFile := FindFirstFileEx(PChar(ParentFolder + Mask), FindExInfoBasic, @lfdStruct, FindExSearchNameMatch, nil, 0);

Geändert von DieDolly (27. Aug 2022 um 23:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.250 Beiträge
 
Delphi 12 Athens
 
#6

AW: FindFirstFileEx liefert Error Falscher Parameter?

  Alt 27. Aug 2022, 23:51
Delphi-Quellcode:
lIndexInfoLevels := FindExInfoBasic;
lIndexSearchOps := FindExSearchNameMatch;
lhFoundFile := FindFirstFileEx(PChar(ParentFolder + Mask), lIndexInfoLevels, @lfdStruct, lIndexSearchOps, nil, 0);
Dein Code aus Post #1:
Verboten sind Variablen nicht, aber man sollte ihnen auch etwas zuweisen.

Und genau das sollte der Compiler dir auch gesagt haben,
Zitat:
Code:
[dcc32 Warnung] Unit11.pas(35): W1036 Variable 'lIndexInfoLevels' ist möglicherweise nicht initialisiert worden
[dcc32 Warnung] Unit11.pas(35): W1036 Variable 'lIndexSearchOps' ist möglicherweise nicht initialisiert worden
denn es war auch der Grund, warum sich FindFirstFileEx bei dir ab und an beschwert hat, wenn da im Speicher nicht zufällig eine mal 0 oder 1 drin war.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Aug 2022 um 23:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz