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/)
-   -   asyncpro + delphi + apdcom1.putstring(chr(128)) (https://www.delphipraxis.net/163806-asyncpro-delphi-apdcom1-putstring-chr-128-a.html)

maddy 17. Okt 2011 10:31

asyncpro + delphi + apdcom1.putstring(chr(128))
 
hallo,
ich versuche mit asyncpro per .putstring den chr(128) zu senden.
also eigentlich will ich in hex 80 senden.
ich benutze einen comport listener, ausserdem läuft das asyncpro logging.
nun zum problem:
ich sende mit dem befehl ApdComPort1.PutString(chr(128));
was auf dem comport ankommt ist $3f also 63 was einem "?" entspricht anstelle von $80(128)(€).

sende ich chr(127) oder chr(129) kommt auch das richtige an also $7f bzw $81.
sende ich ApdComPort1.PutString('€'); kommt auf dem comport $80 an.
vielen dank für eure bemühungen.
mfg
maddy

Bernhard Geyer 17. Okt 2011 10:39

AW: asyncpro + delphi + apdcom1.putstring(chr(128))
 
D2009 oder neuer. Stimmts?

Im Unicode ist $0080 nicht das €-Zeichen. Dieses liegt an der Position $20AC.
Die Funktion Chr(128) liefert ab D2009 eine Widechar zurück welche wenn es als 1-Byte Character Interpretiert werden soll mit der aktuellen Codepage gewandelt werden muss. Da es keine passenden Platz im 8-Bit Ansi-Bereich gibt wird korrekter weise ein $3F (= ?) zurückgeliefert.

maddy 17. Okt 2011 10:53

AW: asyncpro + delphi + apdcom1.putstring(chr(128))
 
ja genau, delphi 2010. das hatte ich wohl vergessen.
und nun? :-)

Bummi 17. Okt 2011 11:01

AW: asyncpro + delphi + apdcom1.putstring(chr(128))
 
wenn Deine Gegenstelle Unicode verdaut wirst Du 2 Bytes schicken müssen, oder schauen ob das Protokoll etwas anderes vorsieht...seriell werden eigentlich nur Bytes übertragen ...
Delphi-Quellcode:
var
 C:Char;
 ast:AnsiString;
 i:Integer;
begin
 c :='€';
 i := 0;
 SetLength(ast,SizeOf(c));
 Move(c,ast[1],SizeOf(c));
 Move(c,i,SizeOf(c));
 Showmessage(IntToHex(i,8));

maddy 17. Okt 2011 12:49

AW: asyncpro + delphi + apdcom1.putstring(chr(128))
 
durch einen tippfehler, sind wir auf die idee gekommen, ansichar(128) zu senden anstelle von chr(128).
und das scheint bis jetzt gut zu klappen.

himitsu 17. Okt 2011 13:03

AW: asyncpro + delphi + apdcom1.putstring(chr(128))
 
Zitat:

Zitat von maddy (Beitrag 1130813)
ich versuche mit asyncpro per .putstring den chr(128) zu senden.

nun zum problem:
Delphi-Quellcode:
ApdComPort1.PutString(chr(128));

Wobei D2010 dir eigentlich sogar den Grund und damit auch die Lösung verrät ... man muß nur mal auf das hören, was der Compiler einem so sagt. :roll:
Zitat:

[DCC Warnung] Unit8.pas(63): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'Char' zu 'AnsiString'
[DCC Warnung] Unit8.pas(63): W1062 Bei Umwandlung der angegebenen WideString-Konstante gehen Informationen verloren


PS: Deine Tastatur sollte eine [Shift]-Taste besitzen, welche man eventuell ebenfalls verwenden könnte. :wink: (nja, wenigstens sind . und , noch vorhanden)


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