Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   allgemeines Verständnisproblem mit Interfaces (https://www.delphipraxis.net/63275-allgemeines-verstaendnisproblem-mit-interfaces.html)

Luckie 16. Feb 2006 08:37


allgemeines Verständnisproblem mit Interfaces
 
Folgender Code:
Delphi-Quellcode:
function TDWJabberSession.GetStatus(JID: WideString): String;
var
  JabberPres: IJabberPres;
begin
  JabberPres := FJabberSession.GetPres(JID, '', True);
  result := JabberPres.Status;
end;
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.

Zottel 16. Feb 2006 08:45

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:
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;
//edit: formatierung ausgebessert

Luckie 16. Feb 2006 09:07

Re: allgemeines Verständnisproblem mit Interfaces
 
Was soll mir dein Code jetzt helfen? Ich weiß ja aus der Dokumentation, dass es dieses Interface gibt.

Zottel 16. Feb 2006 09:20

Re: allgemeines Verständnisproblem mit Interfaces
 
ups. sorry. hatte mich verlesen.

freak4fun 16. Feb 2006 09:24

Re: allgemeines Verständnisproblem mit Interfaces
 
Delphi-Quellcode:
function TDWJabberSession.GetStatus(JID: WideString): String;
var
  JabberPres: IJabberPres;
begin
  //Fehlt hier nicht ein create?
  JabberPres := FJabberSession.GetPres(JID, '', True);
  result := JabberPres.Status;
end;
MfG
freak

Luckie 16. Feb 2006 09:27

Re: allgemeines Verständnisproblem mit Interfaces
 
Dachte ich mir auch, nur gibt es kein IJabberPres.Create. :gruebel:

freak4fun 16. Feb 2006 09:36

Re: allgemeines Verständnisproblem mit Interfaces
 
Du solltest eine Klasse erstellen, die das Interface unterstützt.
Delphi-Quellcode:
TJabberPres = class (TInterfacedObject, IJabberPres)
Denn wenn du auf Funktionen eines Interface zugreifen willst kann das nicht gehen, da sie nicht ausgeprägt sind.

Delphi-Quellcode:
function TDWJabberSession.GetStatus(JID: WideString): String;
var
  JabberPres: IJabberPres;
begin
  JabberPres := TJabberPres.Create;
  JabberPres := FJabberSession.GetPres(JID, '', True);
  result := JabberPres.Status;
end;
MfG
freak

Muetze1 16. Feb 2006 09:52

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?

TKC 16. Feb 2006 09:54

Re: allgemeines Verständnisproblem mit Interfaces
 
Zitat:

Zitat von freak4fun
Du solltest eine Klasse erstellen, die das Interface unterstützt.
Delphi-Quellcode:
TJabberPres = class (TInterfacedObject, IJabberPres)

sollte das nicht besser so sein ?
Delphi-Quellcode:
TJabberPres = class (TComObject, IJabberPres)
Schau dir doch mal ein ppar implementierungen vom TembeddedWB an, z.b. den IDocHostUIHandler.

Luckie 16. Feb 2006 10:27

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 18:30 Uhr.
Seite 1 von 2  1 2      

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