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 Funktionszeiger an COM-Server übergeben (https://www.delphipraxis.net/137090-funktionszeiger-com-server-uebergeben.html)

MatthiasR 14. Jul 2009 08:26


Funktionszeiger an COM-Server übergeben
 
Ich weiß nicht, ob ich mit einer COM-Frage im Unterforum "Windows API / MS.NET Framework API" richtig bin. Wenn nein, bitte verschieben.

Ich möchte ein neues Programmmodul gerne als COM-Server realisieren, da es, wenn es fertig ist, vielleicht auch mal separat vertrieben und von anderen Hostanwendungen angesteuert werden soll. Das Programmmodul bringt seine eigene Datenbank mit, in die es seine Daten abspeichert. Außerdem soll es an gewissen Stellen möglich sein, Daten vom aufrufenden Programm abzurufen bzw. Aktionen im aufrufenden Programm zu bewirken (letzteres also ähnlich einem Event). Der COM-Server soll also ebenfalls - in rudimentärer Form - auf den COM-Client zugreifen können.

Ich hatte mir das so vorgestellt, dass der COM-Client dem COM-Server eine Art Funktionszeiger übergeben kann und die Implementation der Funktionen dann selbst übernimmt. Die Schnittstelle der Funktion (Parameter + Rückgabetyp) müsste dann halt auf beiden Seiten bekannt sein. In einer "normalen" Delphi-Anwendung funktioniert das ja prima über Funktionstypen:
Delphi-Quellcode:
type TAufrufFunktion = function(P1, P2, P3: string): string;
Nur wie funktioniert das über die COM-Schnittstelle hinweg? Gibt es da irgendwelche COM-Datentypen, die genau dafür vorgesehen sind? Oder welcher Weg würde sich da als Lösung anbieten?
Oder wäre mein Lösungsansatz gar nur auf Delphi-Hostanwendungen beschränkt, weil es in anderen Programmiersprachen so etwas wie Funktionszeiger bspw. gar nicht gibt???

Danke im Voraus für eure Tipps :thumb:

xaromz 14. Jul 2009 08:39

Re: Funktionszeiger an COM-Server übergeben
 
Hallo,

ich würde da im COM-Kontext bleiben. Der COM-Server übergibt dem Client ein von Dir vorgegebenes (COM-)Interface; in diesem ist die Funktion definiert, die Du dann einfach aufrufen kannst.

Gruß
xaromz

MatthiasR 14. Jul 2009 08:56

Re: Funktionszeiger an COM-Server übergeben
 
Ich hab dich nun so verstanden, dass der COM-Server dem COM-Client ein COM-Interface zu Verfügung stellt (so wie es in COM ja Gang und Gäbe ist), das der Client verwendet und dessen Funktionen er aufruft. Mir gehts aber darum, dass der Server etwas aufrufen kann, das er vom Client zu Verfügung gestellt bekommt. Also quasi umgekehrt...

Welche Seite meinst du denn nun genau mit
Zitat:

...die Du dann einfach aufrufen kannst...
? Bzw. WER ruft da was auf? Der COM-Server oder der COM-Client?

Bernhard Geyer 14. Jul 2009 09:18

Re: Funktionszeiger an COM-Server übergeben
 
Stich-/Schlagwort wäre hier ein Event Sink. Der Client muß ein COM-Interface implementieren dessen Schnittstelle der Server vorgegeben hat. Beim Anlegen eines COM-Interfaces in Delphi wird doch teilweise angeboten gleich eine Eventschnittstelle mit zu definieren.

MatthiasR 14. Jul 2009 09:30

Re: Funktionszeiger an COM-Server übergeben
 
Ich hätte vielleicht vorher sagen sollen, dass ich kein COM-Experte bin und dies mein erstes richtiges Projekt ist, das ich gerne als COM-Server implementieren würde.

--> Ich habe bereits im Typbibliothek-Editor nach einem Weg gesucht, Events zu definieren. Habe aber nichts gefunden. Kannst du mir weiterhelfen? Was muss ich genau machen, um eine solche Eventschnittstelle zu definieren? Gibts da irgendwo ein Tutorial oder sowas?

Bernhard Geyer 14. Jul 2009 09:44

Re: Funktionszeiger an COM-Server übergeben
 
Zitat:

Zitat von MatthiasR
Gibts da irgendwo ein Tutorial oder sowas?

Bei Google suchencom Delphi Event sink

Oder du besorgst dir das Buch von A. Kosch: COM/DCOM/COM+

MatthiasR 14. Jul 2009 09:59

Re: Funktionszeiger an COM-Server übergeben
 
Zitat:

Zitat von Bernhard Geyer
Oder du besorgst dir das Buch von A. Kosch: COM/DCOM/COM+

...das wir sogar bereits im Haus haben und in dem ich gerade das im Buch nicht abgedruckte Kapitel 8 "Callback vs. Connection Points" auf CD nachgeschlagen habe. Der Weg über so ein Callback-interface, den auch der Herr Kosch da favorisiert, scheint genau das zu sein, was ich mir da vorgestellt hatte. Das werde ich dann mal ausprobieren.

Vielen Dank!


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