Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Variablen vom typ Interface deklarieren?
nepleurepas - Fr 24.04.09 14:11
Titel: Variablen vom typ Interface deklarieren?
Hallo,
ich bin über folgenden code gestolpert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm.Button1Click(Sender: TObject); Var doc :IDocument; Img :IImage; Layout :ILayout; begin doc := IDispatch(CreateOleObject('MODI.Document')) as IDocument; doc.create(FileName); doc.OCR(miLANG_ENGLISH,true,true); Img := IDispatch(doc.Images[0]) as IImage; Layout := IDispatch(Img.Layout) as ILayout; Memo1.Lines.Add(Layout.Text); MiDocView1.Document := doc; doc.Close(false); Img := nil; Layout := nil; end; |
nun würde ich gern wissen, was passiert, wenn man, wie hier im code, variablen vom typ IInterface deklariert? Kann mir da iwie keinen reim drauf machen. Kann das mit dem, was ich über interfaces beim delphi-treff gelesen habe, auf keinen gemeinsamen nenner bringen.(
http://www.delphi-treff.de/sprachen/object-pascal/interfaces/)
hoffe ihr könnt mir da bisschen helfen
rn22 - Mo 04.05.09 21:31
Hallo
es ist ja so: "Interface" ist ein reservierter Ausdruck mit dem ein bestimmter Teil in der Unit eingeleitet wird. Man kann also (meines Wissens) keine Variable vom Typ Interface deklarieren.
Anders sieht es aus, wenn man statt dessen "IInterface" schreibt. Nur die genaue Schreibweise "Interface" ist reserviert - jede abweichende Schreibweise kann man verwenden, um z.B. einen Variablentyp zu definieren, und damit dann eine Variable zu deklarieren.
Wie genau das Problem bei dir liegt, weiß ich aber nicht, denn der Interface-Ausdruck kommt in deinem Codebeispiel ja gar nicht vor.
Grüße
rn22
mkinzler - Mo 04.05.09 21:34
Für COM-Objekte bietet sich ein OleVariant an.
delfiphan - Mo 04.05.09 22:25
Ich verstehe die Frage nicht. Was passiert wenn man da Variablen vom Typ IInterface definiert? ... wozu?
mkinzler hat folgendes geschrieben : |
| Für COM-Objekte bietet sich ein OleVariant an. |
Das bringt dir keinen Vorteil. Ganz im Gegenteil. Dann gehen alle Calls über Automation, was viel langsamer ist als wenn du direkt die Interfaces benutzst. Bei Variants kann dir der Compiler auch nicht beim Code schreiben helfen, sondern es muss alles zur Laufzeit aufgelöst werden. Wenn dir schon die ganzen Definitionen gegeben sind, dann nimm direkt die interfaces (und falls es über Automation gehen muss, dann bietet sich der Weg über dispinterfaces an - das nur am Rande erwähnt).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!