AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehlermeldung bei "FindFirst()"

Ein Thema von Bastler · begonnen am 24. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
Bastler

Registriert seit: 15. Aug 2006
153 Beiträge
 
Delphi 7 Personal
 
#1

Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 15:09
Ich habe folgenden Code:
Delphi-Quellcode:
type TSearchRec = record
      Time: Integer;   // Zeitstempel der Datei.
      Size: Integer;   // Größe der Datei in Byte.
      Attr: Integer;   // Dateiattribute der Datei.
      Name: TFileName;   // DOS-Dateiname und -Dateinamenserweiterung
      ExcludeAttr: Integer;
      FindHandle: THandle;
      FindData: TWin32FindData;
      end;
var
  Form1: TForm1;
  pfad:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var SuchRec:TSearchRec;
begin
SelectDirectory('Wähle den Ordner', '', pfad);

FindFirst('c:\programme\*.*', faAnyFile, SuchRec); //*
if ExtractFileExt(Suchrec.name) = 'logthen
Combobox1.Items.Add(Suchrec.Name);
if FindNext(SuchRec) = 0 then //*
Combobox1.Items.Add(SuchRec.Name)
else
FindClose(SuchRec); //*

end;
Bei den mit //* makierten Zeilen gibt er mit immer folgende Fehlermeldung aus:
Zitat:
[Fehler] Unit1.pas(51): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Aber meiner Meinung nach stimmen die Parameter überein... (vor allem, weil es das gleiche Record ist, wie es in der Hilfe angegeben ist)
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir noch nicht ganz sicher
(A. Einstein)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 15:20
Es muss ein Zeiger auf die TSearchRect Struktur sein. Also muss es @SuchRec heißen. Aber warum hast du die Struktur noch mal selber deklariert? Die wird doch schon von Delphi selber deklariert in der Unit Windows.pas oder so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Schaedel
Schaedel

Registriert seit: 5. Jan 2006
Ort: Saarland
174 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 15:24
Warum erstellst du den Searchrect überhaupt neu?
Edit:Naja Luckie war schneller

Also bei mir funktioniert es so auf jeden fall.

Delphi-Quellcode:
procedure xy.xxxx;
var
  Search : TSearchRec;
begin
  if FindFirst (Directory+'\*.*' , faAnyFile-faSysFile, Search) = 0 then begin
    repeat
      fiExt := uppercase(ExtractFileExt(search.name));
....
Michael S.
  Mit Zitat antworten Zitat
Bastler

Registriert seit: 15. Aug 2006
153 Beiträge
 
Delphi 7 Personal
 
#4

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 15:27
Naja... danke für den Tipp, dass es in der Windows.pas deklariert ist, damit hast du mir indirekt geholfen, da es nämlich kein Pointer sein muss, aber meine doppelte Deklaration Probleme gemacht hat...
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir noch nicht ganz sicher
(A. Einstein)
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#5

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 15:28
Zitat von Luckie:
Es muss ein Zeiger auf die TSearchRect Struktur sein. Also muss es @SuchRec heißen.
Ist doch var, FindFirst braucht keinen Zeiger. Hab gerade mal in meinen Code geschaut, dutzende von Aufrufen ohne Zeiger
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 22:37
War ehrlich gesagt auch nur etwas ins Blaue geraten. Ich war zu faul in der Hilfe zu gucken.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Fehlermeldung bei "FindFirst()"

  Alt 24. Apr 2007, 23:13
Moin Bastler,

Du solltest Dir übrigens angewöhnen bei Funktionen, deren Rückgabewert einen Fehler signalisiert, diesen auch auszuwerten, so wie Schaedel es in seinem Beitrag gezeigt hat.
Ausserdem gehört bei Funktionen die im Erfolgsfalle Resourcen belegen, wie auch FindFirst, ein try/finally-Block dazu, der sicherstellt, dass die Resourcen auch wieder freigegeben werden.

Was Du aber nicht wie Schaedel machen solltest:
faAnyFile-faSysFile Bei Flags, die intern Bitfelder darstellen, sollte man diese mit and not aus der Maske entfernen, und mit or hinzufügen, da man sonst leicht ungültige Werte erhalten kann.
Das obige Beispiel sollte also besser
faAnyFile and not faSysFile lauten.

Auch wenn es in diesem speziellen Falle mit - funktionier.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:26 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