AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interface-Übergabe

Ein Thema von DGL-luke · begonnen am 2. Aug 2006 · letzter Beitrag vom 3. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Interface-Übergabe

  Alt 2. Aug 2006, 22:45
Hallo,

folgende Situation:

Delphi-Quellcode:
type
  IMyInterface = interface(IInterface)
    [(GUID-Zeuch)]
    funktionen(zeuch);
  end;

  TMyInterfaced = class(TInterfacedObject,IMyInterface)
    funktionen(zeuch);
  end;
Darauf will ich jetzt zugreifen:

Delphi-Quellcode:
ObjektListe.Add(TMyInterfaced.Create);

SomeControl.Data := Liste[0]; // Data is Pointer
Und jetzt gibt es irgendwo ein Ereignis:

Delphi-Quellcode:
procedure Bla(Sender: TObject);
begin
  MethodeDieIMyInterfaceWill(IMyInterface(SomeControl.Data));
end;
So, und da knallts, aber gewaltig... was bisher der Compiler nicht wollte:

Delphi-Quellcode:
var obj: TObject;

obj := TObject(SomeControl.Data);
MethodeDieIMyInterfaceWill(obj as IMyInterface);
Und so einiges anderes an wildem rumgecaste... er scheint TObject nicht als mit IInterface kompatibel anzuerkennen. wie sag ic h ihm, er solls trotzdem machen, ohne ihm irgendeine Vertreterklasse (in der ich das Interface implementiere) hinzucasten, was ja eigentlich nicht der Sinn von interfaces ist?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Interface-Übergabe

  Alt 2. Aug 2006, 22:54
Wenn du statt TList TInterfaceList nimmst und statt Referenzen auf die Klassen direkt das Interface ablegst, gehts
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Interface-Übergabe

  Alt 2. Aug 2006, 23:10
ah ja. gut zu wissen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Interface-Übergabe

  Alt 2. Aug 2006, 23:21
ähm... immer noch av... ich machs jetzt so:

Delphi-Quellcode:
InterfaceListe.Add(TMyInterfaced.Create);
SomeControl.Data := Pointer(InterfaceListe[0]);
Delphi-Quellcode:
Pointer(intf) := SomeControl.Data;
MethodeDieIMyInterfaceWill(intf); <- knallt hier
EDIT: 3_of_8 hat mich drauf hingewiesen.... TMyInterfaced ist natürlich von TInterfacedObject abgeleitet.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Interface-Übergabe

  Alt 3. Aug 2006, 21:37
Soo... hab das ganze jetzt komplett gekippt und verwende eine Managerklasse, die Klassen und Elemente hält und bei Bedarf ein Interface rausgibt... da geht der Refcount zwar ganz schnell auf 25, aber das krieg ich schon noch hin.

Für mich ist die Sache erledigt, und nein, den anderen Code zeige ich nicht, das ist Produktionscode, den ich nicht offenlegen darf (bisheriger Code war "anonymisiert" )

PS: Bitte keine blöden Kommentare dazu, wie bereits gesagt, der neue Code hat mit dem alten nichts gemein.
(ich sag das nur, weils den fall schon mal gab...)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Interface-Übergabe

  Alt 3. Aug 2006, 21:50
Hallo Lukas,

deine Versuch mittels Casten eines Interfacezeigers auf einen untypisierten Pointer ist eine ganz böse sache da du hiermit dem Compiler keine Chance läßt die Referenzzählung durchzuführen. Wenn Du den Destruktor deiner TMyInterfaced-Klasse mal debuggen würdest, würdest Du vermutlich feststellen das die Klasse schon zu einem Zeitpunkt freigegeben wird, zu dem du es nicht erwartest.

Ich würde ebenfalls noch eine Co-Klassen definieren damit du ähnich wie bei COM-Interfaces nur noch mit Interfaces arbeitest und nicht in die Versuchung kommst einen gemischten Betrieb zu fahren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Interface-Übergabe

  Alt 3. Aug 2006, 21:57
CoKlasse? Hab ich schonmal gehört... wie macht man das?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Interface-Übergabe

  Alt 3. Aug 2006, 22:01
Delphi-Quellcode:
type
  CoMyInterfaced = class
    class function Create: IMyInterfaced;
  end;

class function CoMyInterfaced.Create: IMyInterfaced;
begin
  result := TMyInterfaced.Create;
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Interface-Übergabe

  Alt 3. Aug 2006, 22:06
ah... na das ist natürlich elegant.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Interface-Übergabe

  Alt 3. Aug 2006, 22:09
Dann geht aber auch

  TMyInterface.Create as IMyInterface und das ohne extra Klasse und Typsicher.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:31 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