Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Unicode-Probleme bei GetDeviceInfoList (https://www.delphipraxis.net/189314-unicode-probleme-bei-getdeviceinfolist.html)

juelin 30. Mai 2016 12:48

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:
  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;
Kann mir da jemand helfen?
Danke und Gruß
Jürgen

Klaus01 30. Mai 2016 12:55

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

himitsu 30. Mai 2016 13:34

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:
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;

m?
Delphi-Quellcode:
for a:=0 to l-1 do
begin
  te3:=DevLists.wdevlists[x].SerialNumber.wsernum[a];
  if te3 = #0 then
    Break;
  te1:=te1+te3;
end;
aber eigentlich wohl eher
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;

juelin 30. Mai 2016 15:47

AW: Code-Probleme
 
ja genau das war es.
Danke Klaus01


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