PChar(string) geht nicht mehr
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
PChar(string) geht nicht mehr
Hallo,
bei winapi aufrufe werden wird doch gerne PChar genommen z.b.
RemoveDirectory(pchar(dir));
da bekomme ich folgenden felermeldung:
D:\Daten\eigene\Lazarus\Units\tools_file.pas(516,19) Error: Illegal type conversion: "ShortString" to "^Char"
warum ist das so ?
bei winapi aufrufe werden wird doch gerne PChar genommen z.b.
RemoveDirectory(pchar(dir));
da bekomme ich folgenden felermeldung:
D:\Daten\eigene\Lazarus\Units\tools_file.pas(516,19) Error: Illegal type conversion: "ShortString" to "^Char"
warum ist das so ?
Re: PChar(string) geht nicht mehr
pluto hat geschrieben:warum ist das so ?
AnsiStrings müssen eingestellt sein. Entweder im Code mit {$H+} oder im
Compiler Dialog
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
quatsch, probiers einfach mal mit PChar(@String)
der fpc ist in sachen Pointer nicht so "nachlässig" wie delphi (oder du schaltest den Delphi kompatiblen Modus ein)
deshalb musst du auch bei der PChar konverteirung natürlich die Adresse des Strings und nicht den string selbst übergeben.
der fpc ist in sachen Pointer nicht so "nachlässig" wie delphi (oder du schaltest den Delphi kompatiblen Modus ein)
deshalb musst du auch bei der PChar konverteirung natürlich die Adresse des Strings und nicht den string selbst übergeben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Das falscheste ist, dass Du "Quatsch" zu meinem posting sagst.Christian hat geschrieben:sagst du mir jetzt noch was an meiner Aussage falsch war ?
Inhaltlich können sich alle mal irren, aber das kann man auch freundlich sagen.
Nun zum Inhaltlichen: Probier's aus!
Compiliert wird pchar(dir) auch im {$mode objfpc}.
Das kann also nicht die Ursache für pluto's Fehlermeldung sein.
{$H-} "AnsiStrings aus" führt aber genau zu seiner Fehlermeldung.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Hast recht, mit AnsiStrings on "biegt" der Compiler sich das selbst hin.
Führt sicher aber irgendwann mal zu komischen effekten, wenn man PChar als solchen einsetzen möchte nämlich als Zeiger auf ne nullterminirte Zeichenkette und der compiler bastelt die Formate selbständig um ...
Führt sicher aber irgendwann mal zu komischen effekten, wenn man PChar als solchen einsetzen möchte nämlich als Zeiger auf ne nullterminirte Zeichenkette und der compiler bastelt die Formate selbständig um ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Wo siehst Du denn hier konkret ein Problem? Beispiel?Christian hat geschrieben:Hast recht, mit AnsiStrings on "biegt" der Compiler sich das selbst hin.
Führt sicher aber irgendwann mal zu komischen effekten, wenn man PChar als solchen einsetzen möchte nämlich als Zeiger auf ne nullterminirte Zeichenkette und der compiler bastelt die Formate selbständig um ...
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Das wird sich vermutlich übersetzen lassen, aber zu falschen Ergebnissen führen.Christian hat geschrieben:PChar(@String)
Ist der String ein short string zeigt PChar(@String) auf das längenbyte. Das soll aber nicht übergeben werden. Außerdem hat ein ashort string kein #0 am ende.
Ist der String ein long string, zeigt PChar(qString) auf sdie Verwaltungs-Information, die will auch keiner haben.
PChar(String) ist korrekt, String muss aber ein long string sein. hier geht aber auch oft @String[1]
-Michael