AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AsyncPro 5: Fehler beim Compilieren

Ein Thema von Peter Müller · begonnen am 11. Nov 2014 · letzter Beitrag vom 11. Nov 2014
Antwort Antwort
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AsyncPro 5: Fehler beim Compilieren

  Alt 11. Nov 2014, 20:29
Hallo,

bin gerade dabei, TurboPower AsyncPro 5.01 unter Delphi XE7 zu installieren, was damals bei XE2 soweit ganz gut funktioniert hat.

Dabei kommen in der Unit AdPager.pas die folgenden Fehlermeldungen:
[dcc32 Fehler] AdPager.pas(1379): E2251 Doppeldeutiger überladener Aufruf von 'StrLen'
System.SysUtils.pas(10741): Verwandte Methode: function StrLen(const PAnsiChar): Cardinal;
System.AnsiStrings.pas(3167): Verwandte Methode: function StrLen(const PAnsiChar): Cardinal;
und
[dcc32 Fehler] AdPager.pas(1380): E2251 Doppeldeutiger überladener Aufruf von 'StrDispose'
System.SysUtils.pas(11965): Verwandte Methode: procedure StrDispose(PAnsiChar);
System.AnsiStrings.pas(3932): Verwandte Methode: procedure StrDispose(PAnsiChar);

Es handelt sich um diese Zeilen (im Quelltext unten Zeilen 5 und 6 nach dem begin):
OutMsg := TAdStr.Create(StrLen(MsgPtr)*2);
StrDispose(MsgPtr);

Da MsgPtr eindeutig als PAnsiChar deklariert wird, ist mir nicht klar, was dem Compiler dabei doppeldeutig ist. Hat jemand von euch eine Idee, was ihm da nicht gefallen könnte?

Vielen Dank

Peter

Die komplette Prozedur im Quelltext:
Delphi-Quellcode:
procedure BuildTapMessages
  (
  const ID: string;
  {in}  Msg:TStrings;
  const UseEscapes: Boolean;
  const MaxLen: Integer;
  {out} Blocks: TStrings);
var
  OutMsg: TAdStr;
  Ct: Integer;
  EOMsg: Boolean;
  MsgPtr : PAnsiChar;
  AnsiMsg : AnsiString;
begin
  Blocks.Clear;

  { build long message from string list }
  MsgPtr := PAnsiChar(Msg.GetText);
  OutMsg := TAdStr.Create(StrLen(MsgPtr)*2);
  StrDispose(MsgPtr);
  OutMsg.Clear;

  for Ct := 0 to Pred(Msg.Count) do begin
    AnsiMsg := AnsiString(Msg[Ct]);
    if UseEscapes then
      OutMsg.Append(ExpandCtrlChars(AnsiMsg))
    else
      OutMsg.Append(StripCtrlChars(AnsiMsg));
  end;

  { Add header and trailer }
  OutMsg.PrePend(AnsiString(cStx + ID + cCr));
  OutMsg.Append(cCr);
  { start counting at beginning of string }
  Ct := 1;

  EOMsg := False;
  while not EOMsg do begin
    { Block full and not end of message }
    if (Ct = MaxLen) and (Ct <= OutMsg.Len) then begin { reached block length }

      if OutMsg[Ct-1] = cCr then begin
        {at end of field: insert <ETB> + CheckSum + <CR> }
        OutMsg.Insert(cEtb, Ct);
        Inc(Ct);
        OutMsg.Insert(CheckSum(SumChars(OutMsg.Copy(1,Ct-1))) + cCr, Ct);
      end

      else begin
      {inside a field: insert <US> + CheckSum + <CR>}
        OutMsg.Insert(cUs, Ct);
        Inc(Ct);
        OutMsg.Insert(CheckSum(SumChars(OutMsg.Copy(1,Ct-1))) + cCr, Ct);
      end;

      { save block into block list }
      Inc(Ct, 3); {move to end of block}
      Blocks.Add(string(OutMsg.Copy(1,Ct)));

      { and start new block }
      OutMsg.Delete(1,Ct); { start new block }
      OutMsg.PrePend(AnsiString(cStx));
      Ct := 1;
    end

    { End of message }
    else if Ct = OutMsg.Len then begin
    { at end of message: append <ETX> + CheckSum + <CR> }
      OutMsg.Append(cEtx);
      Inc(Ct);
      Blocks.Add(string(OutMsg.Copy(1,Ct)) + string(CheckSum(SumChars(OutMsg.Copy(1,Ct)))) + cCr);
      EOMsg := True;
    end

    { counting chars }
    else begin
      Inc(Ct);
    end;
  end;
  OutMsg.Free;
end;
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: AsyncPro 5: Fehler beim Compilieren

  Alt 11. Nov 2014, 21:03
Hallo,

ab XE4 sind die alten AnsiString-String-Funktionen ausgelagert worden.

siehe auch
http://embarcadero.newsgroups.archiv...304246489.html

also muss statt StrLen einfach AnsiStrings.StrLen benutzt werden (unit AnsiStrings einbinden).


Heiko
Heiko
  Mit Zitat antworten Zitat
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: AsyncPro 5: Fehler beim Compilieren

  Alt 11. Nov 2014, 21:16
Super, vielen Dank, das hat funktioniert.

Peter
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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