![]() |
allgemeines Verständnisproblem mit Interfaces
Folgender Code:
Delphi-Quellcode:
Die Methode GetPres liefert ein IJabberPres Objekt zurück. Aber irgendwas mache ich grundsätzlich falsch, da mir der Code mit einer Access Violation abstürzt.
function TDWJabberSession.GetStatus(JID: WideString): String;
var JabberPres: IJabberPres; begin JabberPres := FJabberSession.GetPres(JID, '', True); result := JabberPres.Status; end; |
Re: allgemeines Verständnisproblem mit Interfaces
Vielleicht hilft die das weiter.
Ich gehe aber über die Supports-Methode, um gleich ne rückmeldung zu bekommen, wenn das Interface nicht vorhanden ist.
Delphi-Quellcode:
//edit: formatierung ausgebessert
procedure TFormEditWindow.ControlChange(Sender: TObject; NewObject: TObject);
var InheritedInterface : IcParamFromObject; begin // Testen, ob Interface in Klasse vorhanden ist if Supports(NewObject, IcParamFromObject, InheritedInterface) then begin //Wenn vorhanden, dann das extrahierte Interface abfragen LogForm.LogMemo.Lines.Add(InheritedInterface.GetParamAsString); end else begin // ansonsten Fehler ausgeben raise ERangeError.CreateFmt('Not supported'); end; end; |
Re: allgemeines Verständnisproblem mit Interfaces
Was soll mir dein Code jetzt helfen? Ich weiß ja aus der Dokumentation, dass es dieses Interface gibt.
|
Re: allgemeines Verständnisproblem mit Interfaces
ups. sorry. hatte mich verlesen.
|
Re: allgemeines Verständnisproblem mit Interfaces
Delphi-Quellcode:
MfG
function TDWJabberSession.GetStatus(JID: WideString): String;
var JabberPres: IJabberPres; begin //Fehlt hier nicht ein create? JabberPres := FJabberSession.GetPres(JID, '', True); result := JabberPres.Status; end; freak |
Re: allgemeines Verständnisproblem mit Interfaces
Dachte ich mir auch, nur gibt es kein IJabberPres.Create. :gruebel:
|
Re: allgemeines Verständnisproblem mit Interfaces
Du solltest eine Klasse erstellen, die das Interface unterstützt.
Delphi-Quellcode:
Denn wenn du auf Funktionen eines Interface zugreifen willst kann das nicht gehen, da sie nicht ausgeprägt sind.
TJabberPres = class (TInterfacedObject, IJabberPres)
Delphi-Quellcode:
MfG
function TDWJabberSession.GetStatus(JID: WideString): String;
var JabberPres: IJabberPres; begin JabberPres := TJabberPres.Create; JabberPres := FJabberSession.GetPres(JID, '', True); result := JabberPres.Status; end; freak |
Re: allgemeines Verständnisproblem mit Interfaces
Aber wird so nicht der Inhalt der Variablen JabberPres überschrieben bei der 2. Zuweisung? Auch wenn es Interfaces sind, sind es doch nur Verweise und die werden hier eigentlich überschrieben - oder nicht?
|
Re: allgemeines Verständnisproblem mit Interfaces
Zitat:
Delphi-Quellcode:
Schau dir doch mal ein ppar implementierungen vom TembeddedWB an, z.b. den IDocHostUIHandler.
TJabberPres = class (TComObject, IJabberPres)
|
Re: allgemeines Verständnisproblem mit Interfaces
Nun ja, ich denke mal das hat Delphi schon selber gemacht beim Importieren der Typbibliothek.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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 by Thomas Breitkreuz