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);  // just put here the filename of an image
  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.


dummzeuch - Mo 04.05.09 22:05

Vielleicht hilft das ja:

http://www.dummzeuch.de/delphi/object_pascal_interfaces/deutsch.html


delfiphan - Mo 04.05.09 22:25

Ich verstehe die Frage nicht. Was passiert wenn man da Variablen vom Typ IInterface definiert? ... wozu?

user profile iconmkinzler hat folgendes geschrieben Zum zitierten Posting springen:
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).