PChar(string) geht nicht mehr

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7180
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

Beitrag von pluto »

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 ?

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

Re: PChar(string) geht nicht mehr

Beitrag von theo »

pluto hat geschrieben:warum ist das so ?



AnsiStrings müssen eingestellt sein. Entweder im Code mit {$H+} oder im
Compiler Dialog

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

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

Christian hat geschrieben:quatsch,


Christian, warum reagierst du bloss immer so vorlaut ohne wirklich eine Ahnung zu haben?

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

Beitrag von Christian »

Tut mir leid, sollte nicht so wirken das selbe könnt ich dir aber auch vorwerfen (siehe VT) sagst du mir jetzt noch was an meiner Aussage falsch war ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

heißt diese aussage:
PChar(@String)
Strlen(Pchar(@str));

wobei str ein string ist

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

Beitrag von theo »

Christian hat geschrieben:sagst du mir jetzt noch was an meiner Aussage falsch war ?


Das falscheste ist, dass Du "Quatsch" zu meinem posting sagst.
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.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich glaube das war auch der grund muss ich nochmal testen.

vielen dank für eure tipps !

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

Beitrag von Christian »

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 ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

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 ...


Wo siehst Du denn hier konkret ein Problem? Beispiel?

mschnell
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

Beitrag von mschnell »

Christian hat geschrieben:PChar(@String)


Das wird sich vermutlich übersetzen lassen, aber zu falschen Ergebnissen führen.

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

Antworten