AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi COM Interface: Event von Server zu Client
Thema durchsuchen
Ansicht
Themen-Optionen

COM Interface: Event von Server zu Client

Ein Thema von schwa226 · begonnen am 4. Nov 2008 · letzter Beitrag vom 7. Nov 2008
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

COM Interface: Event von Server zu Client

  Alt 4. Nov 2008, 23:12
Hi,

hab mich nun etwas durch die COM Interface Tutorials durchgeackert.

Wenn ich dieses Beispiel:
http://delphi.about.com/gi/dynamic/o...7126%2C00.html

Ausführe geht es auch super das ich vom Server zum Client ein Event schicken kann. Jedoch wird durch die Invoke Funktion nur die DispID abgefragt.

Ich möchte jedoch vom Server ein solches Event zum Client schicken:

ProgrammName (PChar) ,Command (Int) : Return Boolean.

Ich will somit den Programmnamen + das auszuführende Command an den Client schicken. Dieser sollte mir dann per Boolean ein OK/NOK zurückgeben.

Gibt es da ein einfaches Beispiel (example Source)?
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#2

Re: COM Interface: Event von Server zu Client

  Alt 6. Nov 2008, 15:58
Keiner eine Idee?

werde einmal genauer meine Aufgabenstellung beschreiben:

Ich habe eine ThirdParty.exe die meine Plugin.DLL läd.

Meine Plugin.DLL sendet Events per COM-Server an die Thirdparty.exe.

Nun habe ich ein Zusatzprogramm.exe geschrieben mit dem ich die Events zu der Thirdparty.exe kontrollieren will.

Also:

ThirdParty.exe -> läd Plugin.DLL (Zusatzprogramm.exe nicht gestartet)
Normal werden Events von der Plugin.DLL an die ThirdParty.exe weiter geschickt.

Nun starte ich meine neue Zusatzprogramm.exe.

Das Programm soll sich irgendwie mit der Plugin.DLL verständigen:

Plugin.DLL erhält Event -> Schickt es weiter an Zusatzprogramm.exe -> bekommt ein True/False zurück -> if True wird das Event an ThirdParty.exe weitergeleitet.

Wie kann man das am einfachsten lösen?

Den ein laden der Plugin.DLL durch die Zusatzprogramm.exe fällt aus, da hier ja keine Events kommen würden.

Die Plugin.DLL und Zusatzprogramm.exe entspringen meinem eigenen Source und somit habe ich da alle Möglichkeiten die ich bei der ThirdParty.exe natürlich nicht habe.

Bitte Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: COM Interface: Event von Server zu Client

  Alt 7. Nov 2008, 03:04
Variante 1.)
Dein Zusatzprogramm könnte doch auch als Proxy programmiert werden.
Es bietet also genau das gleiche Interface wie das Plugin an und kann damit anstelle des Plugins von der Thirdparty.exe geladen werden.
Das Zusatzprogramm ruft nun seinerseits das Plugin auf und leitet alle Methodenaufrufe mehr oder weniger 1:1 weiter.

Code:
ThirdParty.exe -> Zusatzprogramm (Proxy) -> Plugin
Das bedeutet natürlich, dass ThirdParty.exe dazu gebracht werden muss, dein Zusatzprogramm zu laden/starten.
Vorteil: du kannst jede Kommunikation zwischen ThirdParty.exe und Plugin überwachen und eingreifen.
Nachteil: man kann nicht dynamisch zur Laufzeit das Zusatzprog starten.

Variante 2.)
Dein Plugin hat zusätzlich zum Interface IPlugin ein weiteres Interface IDiagnose.
Die CoClass muss also beide Interfaces implementieren.

Wenn das Plugin-Objekt erzeugt wird, legt es seinen Interfacepointer in der Running Object Table (ROT) ab.
Wird das Objekt zerstört, entfernt es sich selbst aus der ROT.

Jetzt kommt das Zusatzprogramm und sucht das Objekt in der ROT (mit GetObject()).
Dies ist wichtig, damit sowohl ThirdParty.exe als auch Zusatzprog mit dem gleichen Objekt arbeiten.

Bei Erfolg nimmt es den Interfacepointer und wandelt ihn nach IDiagnose.
Das Zusatzprogramm kann nun über IDiagnose Änderung im Plugin vornehmen (z.B. Properties abfragen und setzen).
Damit das Plugin auch seinerseits mit dem Zusatzprog sprechen kann, bietet das Zusatzprog ein
Objekt mit dem Interface IDiagnoseHost an.
Delphi-Quellcode:
IDiagnose = Interface
  function Getxxxx:integer; // irgendwas auslesen
  procedure Setxxxx(value:integer); // oder setzen
  
  procedure SetDiagHost(value:IDiagnoseHost); // Objekt für Callback
end;
Das Plugin merkt sich den Interfacepointer von SetDiagHost und hat nun die Möglichkeit
beliebige Methoden über IDiagnoseHost im Zusatzprogramm aufzurufen.

Dieses Vorgehen mit einer Callback-Schnittstelle ist einfacher zu handeln als COM-Events.
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#4

Re: COM Interface: Event von Server zu Client

  Alt 7. Nov 2008, 10:26
Hi,

danke für die Antwort!

Klingt ja ganz gut mit der CallBack-Schnittstelle.
Jedoch habe ich mit COM noch keine Erfahrungen und tu mich da etwas schwer mit dem Umsetzen.

Im Anhang hätte ich das Grundgerüst von meiner Plugin.DLL.

Kann mir da jemand das um das Interface für meine Zusatzprogramm.exe erweitern/helfen!?

Vielen Dank!
Angehängte Dateien
Dateityp: zip comremoteplugindll_298.zip (5,6 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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