Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Chr() - Probleme mit Variable (https://www.delphipraxis.net/157062-chr-probleme-mit-variable.html)

Muellermilchtrinker 27. Dez 2010 16:51

Delphi-Version: 2009

Chr() - Probleme mit Variable
 
Hallo DP,

ich hab folgendes:
Ich hab eine Funktion, die ein PWideChar möchte.
Ich muss aber jetzt nur eine 1 senden. Das mache ich mit Funktionxy(Chr(1)). Soweit funktioniert alles auch.
Wenn ich aber das jetzt mit einer Variable machen will, dann funktioniert das nicht (Funktionxy(Chr(i)).
Die Variable hat bekommt in einer Schleife die Werte von 0 bis 4.
Wenn ich das nun mit der Variable machen will, dann bekomme ich den Error: Inkompatible Typen: 'Char' und 'PWideChar'

Wie muss ich das jetzt machen, dass das mit der Variable funktioniert?
Danke schonmal.

Bernhard Geyer 27. Dez 2010 16:54

AW: Chr() - Probleme mit Variable
 
Wie schaut der Quellcode (mit variablendefiniton) aus?

Probier mal statt Chr(i) PWideChar(i)

Muellermilchtrinker 27. Dez 2010 17:03

AW: Chr() - Probleme mit Variable
 
Also der Code wär eigentlich so:
Delphi-Quellcode:
  for I := 0 to 4 do
  begin
    USB_LCD_Command(128,0);
    USB_LCD_Data(Chr(i),1,0);
    sleep(250);
  end;
Mit PWideChar kann ich es compilieren aber beim ausführen bekomm ich eine AV. Das einzigste was geht ist mit der Konstanten und mit Chr()

sx2008 27. Dez 2010 17:12

AW: Chr() - Probleme mit Variable
 
Man braucht einfach nur eine Zwischenvariable:
Delphi-Quellcode:
var
  zeichen : Char;
begin
  ...
  zeichen := Chr(i);
  Funktionxy(@zeichen);
Ein direkter Cast wie z.B. PWideChar(i) kann nach hinten losgehen, denn wenn i=1 dann ist PWideChar(i) gleich $00000001 (also ein Zeiger der auf die Adresse 1 zeigt). ==> Zugriffsverletzung
Was aber gebraucht wird ist ein Zeiger, der auf einen 2-Byte Speicherplatz zeigt, dessen Inhalt = 1 ist.

Also könnte man auf die Idee kommen PWideChar(@i) zu übergeben.
Ein Integer ist aber 4 Bytes lang und man ist dann abhängig von der CPU-Architektur (Big-Endian vs. Small-Endian).

Mit einer Zwischenvariablen erspart man sich die ganzen Probleme.

mkinzler 27. Dez 2010 17:13

AW: Chr() - Probleme mit Variable
 
Versuch mal
Delphi-Quellcode:
PWideChar( Chr(i))

Muellermilchtrinker 27. Dez 2010 17:15

AW: Chr() - Probleme mit Variable
 
Funktioniert. Danke. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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