hilpers


  hilpers > comp.lang.* > comp.lang.delphi.misc

 #1  
07.01.2004, 11:08
Bjoern Wiechmann
Hallo NG,

nur mal zur Sicherheit gefragt: Ist das wirklich so, wie ich diesen
Effekt heute beobachten konnte - benutzt man Unit Windows, dann
funktioniert deletefile nur mit PAnsiChar, verzichtet man auf die Unit
Windows, dann akzeptiert deletefile einen String? Ich habe genau diesen
Effekt in einer kleinen DLL - sobald ich die Unit Windows reincompiliere
(Reihenfolge: sysutils, dann windows), hört der Compiler genau am
DeleteFile-Statement auf und meckert über PAnsiChar und String;
verzichte ich darauf (oder ändere ich die Reihenfolge auf windows, dann
sysutils), gehts?
Die Online-Hilfe hat mich zu dem Thema irgendwie im Stich gelassen ...
danke für Erläuterungen. Oder was unterscheidet die beiden
(offensichtlich vorhandenen) Varianten von DeleteFile sonst noch so?
Sehe ich hier Unicode-Dateinamen als Grund, oder hat es eine andere
Ursache?

Bjoern
 #2  
07.01.2004, 11:14
Holger Lembke
Bjoern Wiechmann <bwiechmann> wrote:

>Sehe ich hier Unicode-Dateinamen als Grund, oder hat es eine andere
>Ursache?


Beide Units definieren 'deletefile', die eine so, die andere so.

Und du hast ja schon gemerkt, in welcher Reihenfolge der Compiler nach den
Definitionen sucht.

Lösung: entweder die 'richtig' Reihenfolge verwenden oder zusätzlich mit
unit.prozedure qualifizieren.
 #3  
07.01.2004, 13:54
Bjoern Wiechmann
Hi,

> Guck' nach. Die eine findest Du in der API-Hilfe beschrieben. Die andere
> ist in Sysutils.pas nachzulesen. In diesem Fall ist es ein Einzeiler:
> Result:=Windows.DeleteFile(PChar(FileName));

also das ist irgendwie auch schon fast ein Joke of the day ... aber
danke, damit ist alles klar.
 #4  
07.01.2004, 14:11
Marian Aldenhoevel
Hi,

> nur mal zur Sicherheit gefragt: Ist das wirklich so, wie ich diesen
> Effekt heute beobachten konnte


Ja.

Die Unit Windows und die Unit SysUtils deklarieren beide etwas namens
DeleteFile(). Wenn man beim Aufruf nicht angibt, welches man meint,
so wird das aus der Unit verwendet, die in der Uses-Liste am weitesten
hinten steht. Das ist auch der Grund dafür, daß man allgemeine Units
in dieser Liste weiter vorne hinschreiben sollte als speziellere.

Willst Du unbedingt ein bestimmtes DeleteFile() verwenden, so
"qualifizierst" Du den Aufruf:

SysUtils.DeleteFile(..);
Windows.DeleteFile(..);

> Oder was unterscheidet die beiden (offensichtlich vorhandenen)
> Varianten von DeleteFile sonst noch so?


Guck' nach. Die eine findest Du in der API-Hilfe beschrieben. Die andere
ist in Sysutils.pas nachzulesen. In diesem Fall ist es ein Einzeiler:

function DeleteFile(FileName:string):boolean;
begin
Result:=Windows.DeleteFile(PChar(FileName));
end;

:-).

Ciao, MM
Ähnliche Themen
Lazarus und uses Windows

Moin, wenn ich in einem Lazarus-Projekt unter Windows 32 "uses Windows" nutzen will, bekomme ich im bestehenden Code folgende Fehlermeldung: unit1.pas(183,26) Error:...

Basis für My.FileSystem.DeleteFile

Hi, My.FileSystem bietet einige Methodenüberladungen, die die Windows-Shell-Spielereien mit den fliegenden Blättern nutzen (SHFileOperation in der API). Finden sich diese...

DeleteFile funktioniert nicht

Hallo, ich habe ein Programm geschrieben, bei dem auf Dateien in einem bestimmten Ordner zugegriffen wird, um zu verhindern, dass jemand anderes mit dem Programm aus dem...

Business Connector: Services ´deleteFile´ und ´moveToFile´

Hallo, Hab ein Problem mit den Services ´writeToFile´ und ´deleteFile´. Wollte diese noch am Ende in meinen Flow einnbinden, um das verarbeitete EDI-File vom...


Alle Zeitangaben in WEZ. Es ist jetzt 03:50 Uhr. | Privacy Policy