Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SerialNG - Komponente unter 2009 bringt Fehler (https://www.delphipraxis.net/126061-serialng-komponente-unter-2009-bringt-fehler.html)

moelski 17. Dez 2008 09:06


SerialNG - Komponente unter 2009 bringt Fehler
 
Moin !

Eine unserer zentralen Komponenten ist SerialNG - eine Komponente für den seriellen Port. Leider gitb es nur Packages bis 2005. Unter 2007 lief das noch stressfrei, aber unter 2009 kommen nun (wie vermutet) Probleme.

Hat zufällig jemand schon SerialNG auf 2009 umgeschrieben?

Wenn nein ... könnte hier jemand ein paar Tips geben wie ich die Fehler weg bekomme?

Es startet direkt hier:
Delphi-Quellcode:
function TSerialCluster.GetDataAsPChar(Dest : PChar) : PChar;
type TMaxSize = array[0..MaxLongInt-1] of Char;
     // die vorherige Zeile bringt : [DCC Fehler] SerialNG.pas(589): E2100 Datentyp zu groß: 2 GB überschritten
     PMaxSize = ^TMaxSize;
begin
  if Dest <> Nil then
    begin
      Move(ClusterData^, Dest^, ClusterSize);
      PMaxSize(Dest)^[ClusterSize] := #0;
    end;
  GetDataAsPChar := Dest;
end;
Und dann gibt es noch einige Fehler dieser Art:
[DCC Fehler] SerialNG.pas(1135): E2010 Inkompatible Typen: 'AnsiChar' und 'Char'

Kann jemand helfen ?

DeddyH 17. Dez 2008 09:13

Re: SerialNG - Komponente unter 2009 bringt Fehler
 
Unter Delphi bis 2007 war ein Char ein AnsiChar und ein PChar ein PAnsiChar. Nun sind das WideChar und PWideChar. Das heißt, evtl. genügt es, alle Chars durch AnsiChars, Strings durch AnsiStrings und PChars durch PAnsiChars zu ersetzen. Der Unicode-Support bleibt dabei natürlich auf der Strecke, aber zumindest kann die alte Funktionalität so vielleicht wieder hergestellt werden.

moelski 17. Dez 2008 09:49

Re: SerialNG - Komponente unter 2009 bringt Fehler
 
Moin !

Ich denke auf UniCode können wir bei einer seriellen Schnittstelle verzichten ...

Habe nun mal alles umgeschrieben.

Delphi-Quellcode:
var
  CommPortName : array [0..127] of AnsiChar;
......
      hCommPort := CreateFile(StrPCopy(CommPortName,'\\.\'+Copy(fCommPort,1,79)),
            GENERIC_READ OR GENERIC_WRITE,
            0,
            nil,
            OPEN_EXISTING,
            FILE_FLAG_OVERLAPPED,0);
Dies produziert nun folgenden Fehler:
[DCC Fehler] SerialNG.pas(1003): E2010 Inkompatible Typen: 'AnsiChar' und 'Char'
-> bezieht sich auf CommPortName

Und ich habe eine Tonne voll mit:
[DCC Warnung] SerialNG.pas(1374): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'

DeddyH 17. Dez 2008 09:57

Re: SerialNG - Komponente unter 2009 bringt Fehler
 
Ich habe leider kein Delphi 2009 zur Verfügung, aber Du solltest Dir mal die Parameter von StrPCopy anschauen, die sind vermutlich auch auf Unicode geändert worden.

hanspeter 17. Dez 2008 10:03

Re: SerialNG - Komponente unter 2009 bringt Fehler
 
Es gibt noch mehr Stellen, wo man Schwierigkeiten bekommt. z.B. die ganze Pointerrechnung.
Variants und TVARRecord sind weitere Kandidaten.
Es gibt übrigens eine Unit Ansistrutils oder so ähnlich. Da sind die alten Funktionen als ANSI Funktionen drin.
Aber Vorsicht diese sind gleichnamig. Das kann zu Seiteneffekten führen. Deshalb sollte man immer mit dem
Namespace arbeiten. (AnsiStrUtils.TextReplace...)
Ein großer Teil der frei verfügbaren Komponenten sollte mit D2009 nicht mehr (ohne Nacharbeit) funktionieren.
Bei der Erprobung von D2009 hatten wir Probleme mit der Stabilität und die neuen Features wie Generics haben noch
einige Bugs, die den Einsatz problematisch machen.
Wir haben uns deshalb entschieden wieder zu D2007 zurückzukehren.
Wenn wir nochmals Aufwand in den Quellcode stecken dann wohl eher in Richtung Delphi-Prism um hier einen gleitenden
Übergang weg von Win32 zu schaffen.

Gruß Peter


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