Autor Beitrag
nepleurepas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Fr 24.04.09 14:11 
Hallo,
ich bin über folgenden code gestolpert:
ausblenden 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.(www.delphi-treff.de/...-pascal/interfaces/)

hoffe ihr könnt mir da bisschen helfen
rn22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 04.05.09 21:34 
Für COM-Objekte bietet sich ein OleVariant an.

_________________
Markus Kinzler.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mo 04.05.09 22:05 
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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).