![]() |
Interface in einer Klasse
Ich habe hier ein Interface und die dazu gehörige Typbibliothek. Jetzt wollte ich, um das ganze einfacher zu Hand haben in einen Klasse verpacken um dann eventuell später sogar eine Komponente daraus zu machen. Ober irgendwie habe ich mit der Klasse Probleme, dass in der Klasse das Interface nicht funktioniert.
Ich frage jetzt erstmal generell, ob es bei meinem Vorhaben etwas spezielles zu beachten gilt bzw. macht es überhaupt Sinn eine Typbibliothek noch mal in eine Klasse zu verpacken. Das nächste Problem was ansteht wäre, wie man Eriegnisse des Interface in der Klasse kapselt. |
Re: Interface in einer Klasse
Lass doch Delphi die benötigte Wrapper-Klasse erzeugen
|
Re: Interface in einer Klasse
Und wie geht das? Oder meinst du die Datei, die Delphi erzeugt, wenn man eine Typbibliothek in sein Projekt importiert?
|
Re: Interface in einer Klasse
Ja, hier kannst du wahlweise auch nur die Wrapper-Unit erzeugen lassen.
|
Re: Interface in einer Klasse
Mal gucken, ob ich dann mit dem Interface besser klarkomme. Danke schon mal für die Hilfe.
|
Re: Interface in einer Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Kommando zurück, das habe ich schon so gehabt.
OK, konkret sieht es so aus: Ich habe die Typbibliothek JabberCOM_TLB.pas (siehe Anhang, Link zur Interface Dokumentation: ![]()
Delphi-Quellcode:
Die Connect Methode sieht so aus:
type
TOnConnect = procedure(Sender: TObject) of object; TOnAuthError = procedure(Sender: TObject) of object; TDWJabberSession = class(TObject) private FJabberSession: TJabberSession; FServer: WideString; FUser: WideString; FPW: WideString; FResource: WideString; FPort: Integer; FConnected: Boolean; procedure SetServer(AServer: WideString); procedure SetUser(AUser: WideString); procedure SetPassword(APW: WideString); procedure SetResource(AResource: WideString); procedure SetPort(APort: Integer); function GetConnected: Boolean; public constructor Create(AServer: WideString; AUser: WideString; APassword: WideString; AResource: WideString; APort: Integer); overload; constructor Create; overload; destructor Destroy; override; property Server: WideString write SetServer; property User: WideString write SetUser; property Password: WideString write SetPassword; property Resource: WideString write SetResource; property Port: Integer write SetPort; procedure Connect; property IsConnected: Boolean read GetConnected; end;
Delphi-Quellcode:
Das Problem ist, dass ich einen Authentifizierungsfehler bekomme. Ich vermute mal, dass die erforderlichen Parameter an das Interface nicht weitergegeben werden, obwohl in der ShowMessage die Variable richtig ausgegeben wird. Komisch ist allerdings, dass wenn ich den Mauszeiger ober FJabberSession halte nur die Ereignisse von TJabberSession erscheinen, nicht aber die Felder.
procedure TDWJabberSession.Connect;
begin ShowMessage(FUser); // ist nicht leer und stimmt FJabberSession.DoConnect(False, jatPlainText); end; Ohne die Typbibliothek in eine Klasse zu kapseln geht es ohne weiteres. Aber das ist mir zu unübersichtlich irgendwie. |
Re: Interface in einer Klasse
OK, vergesst es. War ein dummer Fehler in der Klasse. Das:
Delphi-Quellcode:
hat gefehlt. :wall:
procedure TDWJabberSession.Connect;
begin FJabberSession.Server := FServer; FJabberSession.Username := FUser; FJabberSession.Password := FPW; FJabberSession.Resource := FResource; FJabberSession.Port := FPort; FJabberSession.DoConnect(False, jatPlainText); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz