FindClose funktioniert mit Unit "windows" nicht mehr

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von hubblec4 »

Ich bin da auf ein kleines Problem gestossen und ich versteh nicht so recht wieso der Fehler auftritt.

wenn die unit windows verwendet wird...

Code: Alles auswählen

uses
  Classes, SysUtils,Forms,Dialogs,FileUtil,Graphics,windows;


...bekomme eine Fehlermeldung bei FindClose.

Code: Alles auswählen

cli_para.pas(97,29) Error: Incompatible type for arg no. 1: Got "TSearchRec", expected "LongWord"
 


ohne die windows unit funktioniert alles wie gewünscht.

wenn ich mit der mouse im quelltexteditor über "FindClose" bin, steht im Hilfe text ja auch das ein TSearchRec erwartet wird. ich übergebe ja auch eine variable als TSearchRec.

Wieso will die FindClose prozedur dann aber eine Variable als LongWord?

Ich verwende Lazarus 1.2.2
LG
hubble

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von theo »

Nimm "windows" entweder raus, oder setze es an den Anfang der uses Liste.

So ginge es wahrsch. auch

Code: Alles auswählen

FileUtil.FindClose

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von hubblec4 »

danke für den tipp mit dem "nach vorne setzen".
ich habe dann bissl rumprobiert und rausgefunden das die unit windows vor der unit SysUtils stehen muss dann gehts.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von Komoluna »

Es wird halt die Liste von vorne bis hinten durchgegangen und dann immer die "neueste" Instanz/Definition genommen.
(Wie eine Prioritätsliste)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von hubblec4 »

ist das dann aber nicht ein bug in der windows unit?

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von Komoluna »

Nein, es ist völlig normal, das gleichnamige Funktionen in verschiedenen Units auftauchen.
Meistens machen sie auch fast dasselbe(aber z.b. Auf verschiedene Arten oder mit einem anderen Rückgabewert/format).
Wenn du eine Funktion aufrufst, kannst du entweder

Code: Alles auswählen

Showmessage('test');

oder

Code: Alles auswählen

Dialogs.Showmessage('test');

benutzen. Wenn du keine Unit angibst, wird einfach die Funktion genommen die in der "Prioritätsliste" ganz oben steht(siehe obiger Post).

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von hubblec4 »

ok, verstehe. danke schön für die erklärung.

so könnte man sich das angeben einer unit auch sparen, wenn man nicht allzu oft auf sie zugreifen muss.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von m.fuchs »

hubblec4 hat geschrieben:so könnte man sich das angeben einer unit auch sparen, wenn man nicht allzu oft auf sie zugreifen muss.

Nein, einbinden per uses musst du sie auf alle Fälle.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von theo »

Noch dazu: Die Unit "windows" solltest du unter Lazarus besser nicht benutzen, wenn es irgendwie anders geht, denn damit ist deine Anwendung nur für Microsoft Windows kompilierbar.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von Komoluna »

Viele Funktionen aus Windows werden auch von der Unit LCLIntf bereitgestellt(manchmal mit leicht geänderten Namen).

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von hubblec4 »

theo hat geschrieben:Noch dazu: Die Unit "windows" solltest du unter Lazarus besser nicht benutzen, wenn es irgendwie anders geht, denn damit ist deine Anwendung nur für Microsoft Windows kompilierbar.



danke für den hinweis. ist mir am anfang nicht so wichtig erschienen aber denke man sollte da auch gleich vorrausschauend programmieren.


wäre es möglich die windows unit so einzubinden das sie nur bei windows verwendet wird?

Code: Alles auswählen

{$IFDEF WINDOWS}
  Windows, {for setconsoleoutputcp}
  {$ENDIF}


dann sollte es doch unter Linux auch noch gehen oder?

Hubble

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: FindClose funktioniert mit Unit "windows" nicht mehr

Beitrag von theo »

hubblec4 hat geschrieben:dann sollte es doch unter Linux auch noch gehen oder?


Ja, ist zwar nicht besonders schön aber...
http://wiki.lazarus.freepascal.org/Cons ... .29_output

Antworten