Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   String / MarshaledAString auf Linux-Platform verwenden (https://www.delphipraxis.net/192382-string-marshaledastring-auf-linux-platform-verwenden.html)

Harry Stahl 13. Apr 2017 18:42

String / MarshaledAString auf Linux-Platform verwenden
 
Irgendwie stehe ich gerade auf dem Schlauch:

In Delphi 10.2 wird unter der Platform Linux64 ja kein Ansistring mehr unterstützt.

In den Posix.stdlib ist die _system wie folgt deklariert:

Delphi-Quellcode:
function _system(Name: MarshaledAString): Integer; cdecl;
  external libc name _PU + 'system';
MarshaledAString ist aber _PAnsiChr.

Wie benutzte ich jetzt die _System funktion?

Während
Delphi-Quellcode:
_System ('gedit /home/harry/.config/PCN_RS/Accesslist.txt');
funktioniert, funktioniert dagegen NICHT:

Delphi-Quellcode:
Var
s: string;
begin
  s := 'gedit /home/harry/.config/PCN_RS/Accesslist.txt';
  _System (MarshaledAstring (s));
Es kommt dann die Fehlermeldung "g: not found", was also darauf hindeutet, dass nur der erste Buchstabe des übergebenen Strings verwertet wurde.

Unter MAC OS funktioniert es übrigens mit

_system(PAnsiChar (AnsiString (s)));

Wie muss ich das für Linux64 richtig konvertieren?

jaenicke 13. Apr 2017 19:05

AW: String / MarshaledAString auf Linux-Platform verwenden
 
Ich kann es gerade nicht ausprobieren, aber wie sieht es mit UnicodeToUTF8 oder WideCharLenToStrVar aus, wobei ich bei Linux vermute, dass UTF8 korrekt wäre? Da MarshaledAString nur ein Mapping auf die anderen Typen ist, sollte das doch kompatibel sein und dort verwendet werden können.

Harry Stahl 13. Apr 2017 21:53

AW: String / MarshaledAString auf Linux-Platform verwenden
 
Zitat:

Zitat von jaenicke (Beitrag 1367560)
Ich kann es gerade nicht ausprobieren, aber wie sieht es mit UnicodeToUTF8 oder WideCharLenToStrVar aus, wobei ich bei Linux vermute, dass UTF8 korrekt wäre? Da MarshaledAString nur ein Mapping auf die anderen Typen ist, sollte das doch kompatibel sein und dort verwendet werden können.

Stimmt:

Delphi-Quellcode:
_System (MarshaledAstring (UTF8String(s)));
funktioniert.

Könnte fast schwören, ich hätte das zuvor auch mal probiert, muss aber dann wohl doch was anderes gewesen sein...

bernhard_LA 8. Jul 2020 16:56

AW: String / MarshaledAString auf Linux-Platform verwenden
 
PS: ich verwende hier diese Lösung https://chapmanworld.com/2017/04/06/...s-from-delphi/

nachdem ich UTF eingebaut habe klappts auch bei mir


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz