Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: TIdFTP: SendCmd überschreiben

  Alt 30. Mär 2010, 16:53
Hallo Angel4585,

etwas spät, aber hier die allgemeingültige Lösung für alle DPler:

Zitat von Angel4585:
ich stelle gerade um von D2005 auf D2010 und hab jetzt das Problem, dass bei einer Komponente die von TIdFTP abgeleitet ist, das Überschreiben von SendCmd nichtmehr akzeptiert wird:

Delphi-Quellcode:
TMyFTP = class(TIdFTP)
  private
    .
    .
  public
    function SendCmd(AOut: string; const AResponse: array of SmallInt) : SmallInt; override;
  end;
end;

function TMyFTP.SendCmd(AOut: string; const AResponse: array of SmallInt) : SmallInt;
begin
.
.
end;
Ich versteh jetzt nicht genau warum, TIdFTP selbst hat zwar kein SendCmd, allerdings hat TIdTCPConnection dieses SendCmd, also sollte es doch funktionieren. Oder wo denk ich hier falsch?

Edit: fast vergessen, die Fehlermeldung:
[DCC Fehler] UMyFTP.pas(94): E2137 Methode 'SendCmd' nicht in Basisklasse gefunden
SendCmd() wurde in Delphi 2009 und 2010 wg. Unicode angepasst. Du mußt die Methode so überschreiben, wie sie tatsächlich vorhanden ist.

In D2009/2010 ist dies (siehe IdTCPConnection.pas):
Delphi-Quellcode:
function SendCmd(AOut: string; const AResponse: SmallInt = -1;
  AEncoding: TIdTextEncoding = nil): SmallInt; overload;
function SendCmd(AOut: string; const AResponse: array of SmallInt;
  AEncoding: TIdTextEncoding = nil): SmallInt; overload; virtual;
function SendCmd(AOut: string; const AResponse: string;
  AEncoding: TIdTextEncoding = nil): string; overload;
In Deinem Fall also:
Delphi-Quellcode:
TMyFTP = class(TIdFTP)
  private
    .
    .
  public
    function SendCmd(AOut: string; const AResponse: array of SmallInt;
      AEncoding: TIdTextEncoding = nil): SmallInt; override;
  end;
end;

function TMyFTP.SendCmd(AOut: string; const AResponse: array of SmallInt;
  AEncoding: TIdTextEncoding = nil): SmallInt;
begin
.
.
end;
Alternativ kannst Du für Abwärtskompatibilität das ganze in IFDEFs packen:
Delphi-Quellcode:
TMyFTP = class(TIdFTP)
  private
    .
    .
  public
    function SendCmd(AOut: string; const AResponse: array of SmallInt;
      {$IFDEF UNICODE}AEncoding: TIdTextEncoding = nil{$ENDIF}): SmallInt; override;
  end;
end;

function TMyFTP.SendCmd(AOut: string; const AResponse: array of SmallInt;
  {$IFDEF UNICODE}AEncoding: TIdTextEncoding = nil{$ENDIF}): SmallInt;
begin
.
.
end;
Gruß,
Assertor
Frederik
  Mit Zitat antworten Zitat