Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi COM-Object & CoClass (https://www.delphipraxis.net/82452-com-object-coclass.html)

conti 13. Dez 2006 14:48


COM-Object & CoClass
 
Die Registerkarte für eine TLB-Datei enthält eine Hilfsklasse (CoClass) die 5 Schnittstellen implementiert. Davon ist nur eine die Default-Schnittstelle.
Wenn ich die TLB-Datei als Komponente importiere, generiert Delphi Code nur für die Default-Schnittstelle.
Wie könnte man auch die anderen Schnittstellen verwenden? Ist es überhaupt möglich?
Bin ich komisch oder Delphi ? :gruebel:

shmia 13. Dez 2006 15:13

Re: COM-Object & CoClass
 
Du brauchstt einen Komponentenwrapper für eine CoClass nur dann, wenn du Events empfangen möchtest.
Ansonsten arbeitet man besser ohne kapselnde Komponente und erzeugt das Interface selbst.
Man kann in beiden Fällen aber alle (nichtausgehenden) Interfaces benützen:
Delphi-Quellcode:
var
  x : IZweitesInterface;
begin
  x := Wrapperkomponente.DefaultInterface as IZweitesInterface;
  x.Methode42;

conti 13. Dez 2006 15:59

Re: COM-Object & CoClass
 
Ich arbeite mit Events und habe folgendes versucht:

Delphi-Quellcode:
 z: IErstesInterface;
 x: IZweitesInterface;
 ...
 
 z := CoSK_API.Create;
 x := z as IZeitesInterface;
 x.Methode_Schicke_Rückmeldung;
Die Funktion wird aufgerufen, aber ich erhalte keine Rückmeldung.
Die Rückmeldung sollte über einen Event: OnNotify kommen (der mit ein Object von Typ TSK_API aufgerufen wird)

Ich bin sicher, dass es daran liegt, dass ich die IZweitesInterface nicht richtig einbinden konnte.
Weiss jemand vielleicht eine andere Lösung :?:
Danke

shmia 13. Dez 2006 16:09

Re: COM-Object & CoClass
 
Zitat:

Zitat von conti
Genau, ich möchte Events empfangen. Den COM-Object (und die TLB-Datei) habe ich nicht selbst erstellt ... ich möchte sie nur benutzen.
Z.B. wenn mein Hilfsklasse CoSK_API heisst, dann erzeugt Delphi die Klasse TSK_API. Das meinst du mit Komponent Wrapper?

Richtig, die Klasse TSK_API ist der Komponenten Wrapper. (Wrapper Class= umhüllende Klasse)
Zitat:

Zitat von conti
Delphi-Quellcode:
 w: TSK_API;
 x: IZweitesInterface;
 ...
 x := w.DefaultInterface as IZweitesInterface;
 x.Methode;
bekomme den Fehler: Zugriffsverletzung bei Adresse ...

So müsste es gehen:
Delphi-Quellcode:
// Annahme die Komponente SK_API1 vom Typ TSK_API liegt auf dem Formular
var
  x: IZweitesInterface;
begin
  Assert(Assigned(SK_API1)); // sicherstellen, dass die Komponente vorhanden ist
  SK_API1.Connect;  // wird müssen verbunden sein
  x := SK_API1.DefaultInterface as IZweitesInterface;
  x.Methode;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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