Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   PAnsiChar konvertierung schlägt fehl (https://www.delphipraxis.net/187978-pansichar-konvertierung-schlaegt-fehl.html)

hedie 20. Jan 2016 19:41

PAnsiChar konvertierung schlägt fehl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen

Ich versuche dieses Projekt in meinem zu integrieren:
http://www.delphipraxis.net/169271-pdf-image.html

Ich verwende Delphi XE7 Starter und habe deshalb auch das Problem mit dem PAnsiChar und PChar gehabt.
Nach einigem Anpassen gings schon fast.

Nun habe ich das Problem, dass diese Codezeile:

Delphi-Quellcode:
var argv:PPAnsiChar;
...
argv[0] := PAnsiChar(paramstr(0));
Ergibt nur "F" (meine Applikation liegt auf F:/...
Jedoch ergibt

Delphi-Quellcode:
argv[1]:=PAnsiChar('-sDEVICE=jpeg')
Das korrekte. Nämlich "-sDEVICE=jpeg"

Das selbe Problem hier:
Delphi-Quellcode:
argv[4+i]:=PAnsiChar(
        '-sOutputFile=' + ExportPath + '\' + ExportFile + '%03d.' + typ
      );
Anbei ein Screenshot in welchem man links die Variablen sehen kann.
Kann mir hier jemand weiterhelfen?

Danke schonmal

mkinzler 20. Jan 2016 19:49

AW: PAnsiChar konvertierung schlägt fehl
 
Es handelt sich hierbei um keine Konvertierung, sondern eine Interpretation: Betrachte das folgende als eine Zeiger auf ein AnsiChar.

hedie 20. Jan 2016 19:57

AW: PAnsiChar konvertierung schlägt fehl
 
Vielen Dank für deine Antwort.
Nun dann müsste das ja eigentlich so funktionieren.
Oder übersehe ich da was?

mkinzler 20. Jan 2016 20:04

AW: PAnsiChar konvertierung schlägt fehl
 
Ja. Bei UTF16 hat jedes Zeichen 16 Bit. Bei Zeichen, die es auch bei ANSI gibt ist das 2. Byte dann #0, was bei einem AnsiString das Stringende bedeutet.

hedie 20. Jan 2016 20:09

AW: PAnsiChar konvertierung schlägt fehl
 
Zitat:

Zitat von mkinzler (Beitrag 1327630)
Ja. Bei UTF16 hat jedes Zeichen 16 Bit. Bei Zeichen, die es auch bei ANSI gibt ist das 2. Byte dann #0, was bei einem AnsiString das Stringende bedeutet.

Verstehe ich.
Aber leider weiss ich noch nicht wass es in meinem Fall für einen Workaround braucht.
Leider ist mein Wissen dahingehend noch zu wenig gewachsen.

PPansiChar ist übrigens ein Array of PAnsiChar.

himitsu 20. Jan 2016 20:12

AW: PAnsiChar konvertierung schlägt fehl
 
Als Ziel ein PWideChar verwenden (wenn möglich)
oder den String erst in einen AnsiString und dann PAnsiChar umwandeln?

Vorallem niemals ANSI mit Unicode mischen, und gefälligst auf deinen Compilier hören, wenn er dir das auch laut und deutlich sagt. :!:
String -> PChar
AnsiString -> PAnsiChar
WideString/UnicodeString -> PWideChar

mkinzler 20. Jan 2016 20:20

AW: PAnsiChar konvertierung schlägt fehl
 
Wenn man sicher sein kann, dass keine wirklichen 16Bit Zeichen auftreten könnte man jeweils nur das 1. Byte verwenden oder man geht den weg über UTF8.

Versuch es mal mit:

Delphi-Quellcode:
var argv:PPAnsiChar;
...
argv[0] := PAnsiChar( Utf8Encode(paramstr(0)));

hedie 20. Jan 2016 20:21

AW: PAnsiChar konvertierung schlägt fehl
 
Vielen Dank für eure Antworten.

Ich habe nun alles auf PWideChar geändert.
Nun funktioniert mal dieses eine Problem.

Nun bekomme ich jedoch den Error "**** Unable to open the display device, quitting."

Das ist jedoch eine neue Baustelle...

Danke euch!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.

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