Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Doppeldeutiger überladener Aufruf (https://www.delphipraxis.net/135356-doppeldeutiger-ueberladener-aufruf.html)

emsländer 9. Jun 2009 16:17


Doppeldeutiger überladener Aufruf
 
Moin,

beim Compilieren mit Deplhi 2007 taucht die Fehlermeldung "Doppeldeutiger überladener Aufruf" auf

Delphi-Quellcode:
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TTnCnx.Send(
    Data : PChar;
    Len : Integer) : integer;
var
    I : Integer;
    Ch : AnsiChar;
begin
    if Assigned(Socket) then begin
        Result := 0;
        for I := 0 to Len - 1 do begin
            Ch    := AnsiChar(Data[I]);
            Result := Result + Socket.Send(@Ch, 1);
        end;
    end
    else
        Result := -1;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TTnCnx.SendStr(Data : String) : integer;
begin
    Result := Send(@Data[1], Length(Data));  // HIER ENSTEHT DIE FEHLERMELDUNG
end;
Hat da jemand eine Lösung?

Gruss

EL

Phoenix 9. Jun 2009 16:21

Re: Doppeldeutiger überladener Aufruf
 
Wie sind denn die Deklaration aus?

emsländer 9. Jun 2009 16:22

Re: Doppeldeutiger überladener Aufruf
 
Zitat:

Zitat von Phoenix
Wie sind denn die Deklaration aus?

hier

Delphi-Quellcode:
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function   Send(Data : Pointer; Len : Integer) : integer; overload;
    function   Send(Data : PChar; Len : Integer) : integer; overload;
    function   SendStr(Data : String) : integer;
Gruss

EL

jfheins 9. Jun 2009 16:24

Re: Doppeldeutiger überladener Aufruf
 
Sowohl PChar als auch Pointer sind Zeiger - also doppeldeutig. Übergebe statt dem PChar nen String oder mache 2 getrennte Funktionen daraus ;)

Phoenix 9. Jun 2009 16:27

Re: Doppeldeutiger überladener Aufruf
 
Zitat:

Zitat von emsländer
Delphi-Quellcode:
  function   Send(Data : Pointer; Len : Integer) : integer; overload;
  function   Send(Data : PChar; Len : Integer) : integer; overload;

Die zwei kann der Compiler nicht auseinanderhalten. PChar und Pointer sind beides intern Pointer und da weiss er dann nicht welche Methode Du meinst.
Nehm mal die 'PChar'-Version ersatzlos raus. Die Pointer-Version sollte auch mit PChars zurechtkommen können.

himitsu 9. Jun 2009 16:32

Re: Doppeldeutiger überladener Aufruf
 
falls die PChar (was meißt der Fall sein sollte) mit #0 abgeschlossen sein sollten, dann kannst du da auch das Len weglassen und die Länge über das #0 bestimmten :angel:


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