Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Tatsächliche und formale Var-Parameter stimmen nicht überein
pascalsv - Sa 05.08.06 14:38
Titel: Tatsächliche und formale Var-Parameter stimmen nicht überein
Hallo zusammen,
ich habe hier folgenden Such-Thread, bei dessen Kompilierung der Fehler: "Tatsächliche und formale Var-Parameter müssen überein stimmen" auftaucht. Ich weiß aber nicht, warum und was ich ändern muss.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| unit uSuchThread;
...
implementation
procedure TSuchThread.execute; begin while not Terminated do begin FileSearch('C:\Dokumente und Einstellungen\Pascal\Desktop\ABBA\', '*.mp3'); end;
end;
procedure TSuchThread.FileSearch(const Path, FileName : string); var Rec : TSearchRec; begin if FindFirst (Path + FileName, faAnyFile - faDirectory, Rec) = 0 then try repeat mp3Liste.Items.Add(Path + Rec.Name); until FindNext(Rec) <> 0; finally FindClose(Rec); bStartButton.Enabled := true; end; end;
end. |
Weiß jemand Rat, bitte?
Danke & Gruß,
Pascal
Moderiert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Sa 05.08.2006 um 14:57
mkinzler - Sa 05.08.06 14:44
Versuchs mal mit:
Delphi-Quelltext
1: 2:
| pfad := Path + FileName; if FindFirst ( pfad, ... |
pascalsv - Sa 05.08.06 14:47
Hallo mKinzler, leider nicht, das hatte ich auch schon probiert. Habe sogar das "- faDirectory" versuchshalber weggelassen...
:(
Pascal
Martok - Sa 05.08.06 14:52
Ich würde mal sagen, Der Compiler nimmt das FindFirst aus Windows.pas. Gib mal explizit SysUtils.Findfrst(...) an.
Du könntest auch mal deine Uses-Klausel sortieren. Windows sollte vor SysUtils stehen, da ja von hinten abgearbeitet wird.
mkinzler - Sa 05.08.06 14:55
Komisch, sollte eigentlich funktionieren.
BTW. es müßte faAnyFile + faDirectory heißen.
Gausi - Sa 05.08.06 14:56
FindFirst hat als ersten Parameter ein PChar, keinen String. Wenn man nur etwas wie 'meinstring' hat, dann akzeptiert der Compiler das meistens, aber sobald man mit Variablen und + arbeitet, muss man explizit eine Typumwandlung angeben:
Delphi-Quelltext
1:
| FindFirst (Pchar(Path + FileName), faAnyFile - faDirectory, Rec) = 0 |
mkinzler - Sa 05.08.06 15:01
Bei mir nicht
Delphi-Hilfe hat folgendes geschrieben: |
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; |
[Edit es gibt 2 verschiedene Implementation von diese Funktion, wie Martok schon erwähnt hat, eine in Windows und eine in SysUtils. Es scheint so als ob Borland die 2. eingeführt hat, um das manuelle Casten nach PChar zu umgehen.
pascalsv - Sa 05.08.06 15:38
Hallo zusammen,
ist das kompliziert...
Ich habe das Problem gefunden. Es lag an meiner Definition von TSearchRec. Ich hatte diese Definition vor implementation eingefügt, aber das geht wohl nicht so...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TSearchRec = record Time: Integer; Size: Integer; Attr: Integer; Name: TFileName; ExcludeAttr: Integer; FindHandle: THandle; FindData: TWin32FindData; end;
implementation |
Pascal
Delete - Sa 05.08.06 15:54
nicht getestet, aber schreib doch mal "faAnyFile - [faDirectory]", so weit ich mich erinnere ist dies eine mengenoperation, hab aber damit schon ewig nichts mehr gemacht.
mkinzler - Sa 05.08.06 15:58
Grenzgaenger hat folgendes geschrieben: |
nicht getestet, aber schreib doch mal "faAnyFile - [faDirectory]", so weit ich mich erinnere ist dies eine mengenoperation, hab aber damit schon ewig nichts mehr gemacht. |
Nein es ist ein Integer und deshlab muß die muß man die Konstanten addieren addieren. Aber
pascalsv hat seinen Fehler ja jetzt gefunden ;-)
pascalsv - Sa 05.08.06 16:05
Hallo zusammen.
Vielen Dank für Eure Hilfe!! Da programmiert man für einige Jahre nicht und schon ist das alte Wissen weg... :roll:
Pascal
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!