COM-Object mit Events
[delphi]Ich sollte ein COM-Objekt einbinden und auf dessen Events reagieren.
Ich kann zwar auf die Properties und Methoden zugreifen, die Events sind jedoch nicht vorhanden. In einem VB-Beispiel wird die Klasse mit "Private WithEvents m_objAPI As API" instanziert. Was ich jetzt brauche ist der passende Delphi-Befehl zu der "WithEvents"-Anweisung. Hat da jemand eine Idee? |
Re: COM-Object mit Events
Importier dir doch die Typlibrary und lass dir von Delphi ein paasendes VCL-Objekt mit passend verknüpfter Eventschnittstelle erstellen.
Falls aufgrund von "komischer" Eventschnittstelle nicht klappt probier mal EventSinkImp aus. |
Re: COM-Object mit Events
Hallo Bernhard,
klappt leider beides nicht. Delphi erstellt die Events in einem dispinterface(was auch immer das bedeutet. Das Programm sventsinkimp meldet "Unable to import type library file:...." Was nu????? Danke für deine Antwort Markus |
Re: COM-Object mit Events
Zitat:
Um was für ein COM-Objekt geht es denn? |
Re: COM-Object mit Events
@markus.waibel: kannst du deine Delphi Version in deinen persönlichen Einstellungen hinterlegen ?
Von der Version hängt auch ab, wie gut Delphi mit TLBs und COM-Objekten umgehen kann. Unterhalb von Delphi 5 ist diese Unterstützung noch relativ unzureichend. |
Re: COM-Object mit Events
@SHMIA: Da komm ich jetzt nicht ganz mit. Vermute du sprichst das Tool EventSinkGenerator an. bei Optionen kann ich da jedoch nichts einstellen was die Delphi-Version betrifft. Ich verwende Delphi7.
Gruß Markus |
Re: COM-Object mit Events
Zitat:
|
Re: COM-Object mit Events
OK Jetzt hab ich's.
Mein Profil habe ich eben aktualisiert. |
Re: COM-Object mit Events
Ich hab jetzt mal nachgelesen und begonnen meinen eigenen EventSink zu entwickeln.
Im Moment scheitere ich daran den Events die Parameter zu übergeben. Ich habe mich an ein Beispiel von Codegear gealten. Dabei wird ein kleines Testprogramm (Client und Server) erstellt, welches ein Event vom Server im Client abhandelt. Dieses Event hat jedoch keine Übergabeparameter. Mein Event übergibt zwei Parameter. Wie bekomme ich jetzt die Parameter des Events des Servers in der Invoke-Prozedur als Parameter für meine Client-Prozedur????? (Ich hoffe das war jetzt nicht zu kompliziert...) |
Re: COM-Object mit Events
Kannst du TLB mal hochladen und dazu angeben, um welches Event-Interface es sich handelt ?
Man kann die TLB wie folgt extrahieren: Im Delphi Menue: Datei -> Öffnen Dateityp auf "Typbibliothek" umstellen. EXE, DLL oder OCX-Datei laden. (kann sehr laaaange dauern) Datei -> Speichern unter (Dateiendung auf .TLB ändern) Als Hintergrund: um ein COM-Event zu empfangen, benötigt man entweder a.) ein passendes IDispatch-Interface oder b.) ein Interface, dass von der Server-TLB vorgegeben wird. (frühe Bindung) Delphi kann nur mit dem Fall a.) umgehen; mit Fall b.) kommt Delphi (aber auch VB-Script, Java-Script) nicht klar. Beim Fall a.) gibt es noch zwei Varianten: 1.) entweder der Server ruft zuerst die function GetIDsOfNames auf, und danach Invoke 2.) der Server ruft direkt Invoke auf weil ihm die DispIds schon von der TLB bekannst sind. Wenn der Server nach Fall 1.) agiert (ist aber eher selten), dann hat Delphi ein Problem:
Delphi-Quellcode:
function TEventDispatch.GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; begin Result := E_NOTIMPL; // nicht implementiert, blöd end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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