![]() |
Unicode-Probleme bei GetDeviceInfoList
Hallo zusammen,
ich habe ein Problem und weiß nicht weiter. Ich habe ein Programm, welches Laser ansteuert (Lumax und Netlase). Wenn ich das mit Delphi 7 laufen lasse läuft alles. Mit Embarcado XE5 bekomme ich bei der DEVLIST komische Zeichen. Hier ein Programmauszug:
Delphi-Quellcode:
Kann mir da jemand helfen?
s:=LW_CreateDeviceInfoList(adev);
if s = 0 then begin Preturn:=0; if adev > 0 then begin Preturn:=2; ldr1:=@DevLists; num:=1; ldr2:=@num; s:=LW_GetDeviceInfoList(ldr1, ldr2); if s = 0 then begin Preturn:=0; for x:=0 to adev-1 do begin te1:=''; l:=Length(DevLists.wdevlists[x].SerialNumber.wsernum); m:=1; for a:=0 to l-1 do begin te3:=DevLists.wdevlists[x].SerialNumber.wsernum[a]; if te3 = chr(0) then begin m:=0; end; if m = 1 then begin te1:=te1+te3; end; end; // hier sollte in te1 'LX2UUK05' stehen // bei XE5 steht hier '塌唲䭕㔰'#$12'廜盟楍楮畬慭⁸楌桧⁴' end; end; end; end; Danke und Gruß Jürgen |
AW: Code-Probleme
Hallo,
in Delphi XE5 ist ein Char ein 2 Byte Zeichen. Daher hilft es vielleicht char mit ansiChar auszutauschen. In Delphi 7 ist ein 1 Byte Zeichen. Grüße Klaus |
AW: Code-Probleme
Jo, sieht nach dem beliebten Unicode-Problem aus, was man in den Richtlinien nachlesen kann, welche zum Delphi 2009 von Codegear/Embarcadero rausgegeben wurden.
Zitat:
Delphi-Quellcode:
aber eigentlich wohl eher
for a:=0 to l-1 do
begin te3:=DevLists.wdevlists[x].SerialNumber.wsernum[a]; if te3 = #0 then Break; te1:=te1+te3; end;
Delphi-Quellcode:
te1:=DevLists.wdevlists[x].SerialNumber.wsernum;
oder
Delphi-Quellcode:
te1:=PAnsiChar(@DevLists.wdevlists[x].SerialNumber.wsernum);
je nachdem, wie wsernum definiert ist. Grob drüber geschaut und ohne Kenntnis der Header, würde ich denken das wäre der eigentlich "nur" nötig Code, zuzüglich der nötigen Anpassungen wegen des Unicodes.
Delphi-Quellcode:
if LW_CreateDeviceInfoList(adev) = 0 then
begin Preturn:=0; if adev > 0 then begin Preturn:=2; num:=1; if LW_GetDeviceInfoList(@DevLists, @num) = 0 then begin Preturn:=0; for x:=0 to adev-1 do begin //te1:=PAnsiChar(@DevLists.wdevlists[x].SerialNumber.wsernum); te1:=DevLists.wdevlists[x].SerialNumber.wsernum; ... end; end; end; end; |
AW: Code-Probleme
ja genau das war es.
Danke Klaus01 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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 by Thomas Breitkreuz