AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem bei Ableitung von TIdTCPClient (Override von Create)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Ableitung von TIdTCPClient (Override von Create)

Ein Thema von christian.noeding · begonnen am 9. Dez 2008 · letzter Beitrag vom 9. Dez 2008
Antwort Antwort
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#1

Problem bei Ableitung von TIdTCPClient (Override von Create)

  Alt 9. Dez 2008, 08:39
Guten Morgen,


im Internet habe ich einen Komponentensatz für die digitale Märklin-Eisenbahnsteuerung gefunden, den ich gerne in meinem Lichtprogramm nutzen möchte, um entsprechend die Eisenbahn anzusteuern. Die Komponente stellt normalerweise eine TCP-Verbindung mit einem Server her, der die Hardwareausgabe regelt.
Die Komponente leitet dafür Funktionen vom IdTCPClient der Indys ab und überschreibt einige Grundfunktionen. Leider meckert mein Delphi7 beim Kompilieren: "Eine statische Methode kann nicht überschrieben werden". Dies tritt beim Versuch auf, "Create", "Disconnect" und "Connect" zu überschreiben.

Ich nutze Delphi7 und die Indys in der Version 10.

Wonach muss ich suchen, um den Fehler zu finden? Ich habe in den Sources der Indys mal geschaut, aber dort sind die Funktion ganz normal deklariert (jedenfalls für meine Augen)?


Hier ein Teil des Codes der Komponente:
Delphi-Quellcode:
  TSRCPBaseClient = class(TIdTCPClient)
  private
    FLogEnabled: Boolean;
    FSessionID: Integer;
    FOnLog: TLogEvent;
    FOnError: TNotifyEvent;
    FClientMode: TSRCPClientMode;
    FServerVersions: Set of TSRCPCommandVersion;
    FVersion: TSRCPCommandVersion;
    FResponse: String;
    FOnDisconnected: TNotifyEvent;
    procedure ReceiveWelcome;
    procedure SetUsedVersion;
    procedure SetConnectionMode;
    procedure StartClient;
    procedure SetClientMode(const Value: TSRCPClientMode);
    procedure DoLog(const S: String);
    procedure DoError;
    procedure HandleOnDisconnect(Sender: TObject);
    function DoReceiveAnswer(Cmd: TSRCPCmd; S: String): Boolean;
  protected
    procedure SetVersion(const Value: TSRCPCommandVersion);virtual;
    procedure DoDisconnect;virtual;
  public
    constructor Create(AOwner: TComponent); override; // <-- HIER MECKERTS (STATISCHE METHODE KANN NICHT ÜBERSCHRIEBEN WERDEN)
    destructor Destroy; override;
    procedure SendCommand(Cmd: TSRCPCmd);
    function ReceiveAnswer(Cmd: TSRCPCmd): Boolean;
    procedure Connect(const ATimeout: Integer = IdTimeoutDefault); override; // <-- HIER MECKERTS (CONNECT NICHT GEFUNDEN)
    procedure Disconnect; override; // <-- HIER MECKERTS (STATISCHE METHODE KANN NICHT ÜBERSCHRIEBEN WERDEN)
    property ClientMode: TSRCPClientMode read FClientMode write SetClientMode;
    property SessionID: Integer read FSessionID;
    property Response: String read FResponse;
  published
    property LogEnabled: Boolean read FLogEnabled write FLogEnabled default False;
    property Version: TSRCPCommandVersion read FVersion write SetVersion default cv082;
    property OnError: TNotifyEvent read FOnError write FOnError;
    property OnLog: TLogEvent read FOnLog write FOnLog;
    property OnDisconnected: TNotifyEvent read FOnDisconnected write FOnDisconnected;
  end;


Vielen Dank für ein paar Tipps
Christian
Christian Nöding
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Problem bei Ableitung von TIdTCPClient (Override von Cre

  Alt 9. Dez 2008, 09:09
Zitat von christian.noeding:
Ich nutze Delphi7 und die Indys in der Version 10.
Möglicherweise benötigst Du eine neuere Version der Indy 10 Library. Einige "breaking changes" in Indy 10 machen das Kompilieren zu einer Art Lotterie

Eine aktuelle Version kann man z.B. hier finden:

http://indy.fulgan.com/ZIP

Tip: zum Testen Indy nicht unbedingt als Package in Delphi installieren, sondern einfach nur im Projekt den Suchpfad einrichten ...
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Problem bei Ableitung von TIdTCPClient (Override von Cre

  Alt 9. Dez 2008, 09:17
Hi,

danke für die Antwort, aber die Indys in Version 10 sind doch die aktuellsten, oder?



Die Indys laufen ja auch ohne Probleme. Die Klassenableitung durch die gepostete Komponente ist doch wahrscheinlich das Problem. Ich habe nochmal nachgeschaut, die Indys überladen die Connect-Funktion. Womöglich gibts hier ein Problem eine Überladene Funktion zu Überschreiben... ich kenne mich mit den Klassenfunktionen nicht sonderlich gut aus.


In deinem Link gibts eine ältere Version des IdTCPBaseClienten. Eventuell kann ich die parallel zur Indy 10 Installation für das Kompilieren dieses einen Projektes nutzen... mal sehen.


bis dann,
Christian
Christian Nöding
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Problem bei Ableitung von TIdTCPClient (Override von Cre

  Alt 9. Dez 2008, 09:29
Zitat von christian.noeding:
danke für die Antwort, aber die Indys in Version 10 sind doch die aktuellsten, oder?
Ja und nein. Es gibt viele verschiedene Versionen 10 der Indys. Indy 10.2.3 ist die aktuelle Versionsnummer, doch seit August 2007 wurde diese Versionsnummer auch nicht mehr geändert, obwohl es seitdem "breaking changes" im Kern gab.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Problem bei Ableitung von TIdTCPClient (Override von Cre

  Alt 9. Dez 2008, 12:09
Hi,

versuch doch mal Deine Klasse von "TIdTCPClientCustom" abzuleiten.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Problem bei Ableitung von TIdTCPClient (Override von Cre

  Alt 9. Dez 2008, 12:30
Danke für den Tipp, aber es kommt der gleiche Fehler "Statische Methode kann nicht überschrieben werden".

Kann es daran liegen, dass IdTCPClientCustom die Funktionen z.T. überlädt? Zudem werden die Funktionen "Create" und "Disconnect" offensichtlich durch TIdTCPConnection geerbt. Somit müsste ich ja grundlegende Funktionen der Indys anpassen... Siehe hier:

Delphi-Quellcode:
  TIdTCPClientCustom = class(TIdTCPConnection)
  protected
    FBoundIP: String;
    FBoundPort: Integer;
    FBoundPortMax: Integer;
    FBoundPortMin: Integer;
    FConnectTimeout: Integer;
    FDestination: string;
    FHost: string;
    FIPVersion: TIdIPVersion;
    FOnConnected: TIdNotifyEvent;
    FPassword: string;
    FPort: TIdPort;
    FReadTimeout: Integer;
    FUsername: string;
    //
    FOnBeforeBind: TIdNotifyEvent;
    FOnAfterBind: TIdNotifyEvent;
    //
    procedure DoOnConnected; virtual;
    function MakeImplicitClientHandler: TIdIOHandler; virtual;
    //
    procedure SetConnectTimeout(const AValue: Integer);
    procedure SetReadTimeout(const AValue: Integer);
    procedure SetBoundIP(const AValue: String);
    procedure SetBoundPort(const AValue: Integer);
    procedure SetBoundPortMax(const AValue: Integer);
    procedure SetBoundPortMin(const AValue: Integer);
    procedure SetHost(const AValue: string); virtual;
    procedure SetPort(const AValue: TIdPort); virtual;
    procedure SetIPVersion(const AValue: TIdIPVersion); virtual;
    //
    procedure SetOnBeforeBind(const AValue: TIdNotifyEvent);
    procedure SetOnAfterBind(const AValue: TIdNotifyEvent);
    //
    procedure SetIOHandler(AValue: TIdIOHandler); override;
    procedure InitComponent; override;
    //
    function GetReadTimeout: Integer;
    //
    property Host: string read FHost write SetHost;
    property IPVersion: TIdIPVersion read FIPVersion write SetIPVersion;
    property Password: string read FPassword write FPassword;
    property Port: TIdPort read FPort write SetPort;
    property Username: string read FUsername write FUsername;
    //
    property OnConnected: TIdNotifyEvent read FOnConnected write FOnConnected;
  public
    procedure Connect; overload; virtual;
    // This is overridden and not as default params so that descendants
    // do not have to worry about the arguments.
    // Also has been split further to allow usage from C# as it does not have optional
    // params
    procedure Connect(const AHost: string); overload;
    procedure Connect(const AHost: string; const APort: Integer); overload;
    function ConnectAndGetAll: string; virtual;

    property BoundIP: string read FBoundIP write SetBoundIP;
    property BoundPort: Integer read FBoundPort write SetBoundPort default 0;
    property BoundPortMax: Integer read FBoundPortMax write SetBoundPortMax;
    property BoundPortMin: Integer read FBoundPortMin write SetBoundPortMin;

    property ConnectTimeout: Integer read FConnectTimeout write SetConnectTimeout;
    property ReadTimeout: Integer read GetReadTimeout write SetReadTimeout;
    property OnBeforeBind:TIdNotifyEvent read FOnBeforeBind write SetOnBeforeBind;
    property OnAfterBind:TIdNotifyEvent read FOnAfterBind write SetOnAfterBind;

  published
  end;
Christian Nöding
  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 06:08 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