Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Di 03.06.14 13:33 
Win8.1, XE5, 32 Bit

Hallo,

bei der Inbetriebnahme von AsyncPro gibt es Probleme, Senden läuft einwandfrei, der Empfänger antwortet auch korrekt, aber der aus den zurückgelieferten Bytes zusammengesetzte (Wide)String liefert mir unleserliches Zeug (unicode oder so etwas?). Hier die Abfrage mit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.ApdDataPacket1StringPacket(Sender: TObject; Data: string);
begin
  Form1.edit1.text := Data;
end;


Das Ganze sieht dann so aus:

ㄼㄱ†㤲㌳㠹〰ㄱ‱㈠㌹㤳〸㸰

Lege ich aber ein ADTerminal mit auf die Form, zeigt das mir die korrekten Zeichenfolge an, also ein Kodierungsproblem.
Was kann ich tun, um zu meinem "richtigen" String (<111 23551 ...... >) zu kommen??
Kann mir da jemand bitte einen Tipp geben?

ibh_compucat

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt

_________________
Was du nicht begreifst, kannst du nicht verlernen!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 03.06.14 13:39 
Data scheint kein String (=UnicodeString ab Delphi 2009), sondern ein AnsiString zu sein. Kannst Du den Parametertyp ändern?
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Di 03.06.14 13:43 
wo kann ich den ändern?
In der Definition der procedure ist Data doch als String deklariert.

ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 03.06.14 13:44 
Deshalb ja meine Frage. Ich kenne AsyncPro leider nur dem Namen nach, aber bist Du sicher, dass Du auch die zu Deinem Delphi passende Version installiert hast?
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Di 03.06.14 13:47 
ja, ist 5.00. Ist laut Hersteller für XE5 geeignet.
Die andere Komponente (AdTerminal) funktioniert ja einwandfrei. Ist vom gleichen Hersteller.

ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 03.06.14 14:29 
Ein einfacher Typecast wird nichts bringen, da das höherwertige Byte dabei auf der Strecke bleibt. Ich habe daher mal eine Möglichkeit ausprobiert, das Ergebnis scheint stimmig zu sein. Evtl. gibt es auch schon eine fertige Routine dafür, aber die konnte ich auf die Schnelle nicht finden.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const
  ORIGINAL: UnicodeString = 'ㄼㄱ†㤲㌳㠹〰ㄱ‱㈠㌹㤳〸㸰';
var
  s: AnsiString;
begin
  SetLength(s, Length(ORIGINAL) * 2);
  CopyMemory(@s[1], PWideChar(ORIGINAL), Length(s));
  ShowMessage(s);
end;
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Di 03.06.14 14:54 
Das ist die Lösung, läuft super.

Vielen, vielen Dank!

ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!