Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Daten oder Anweisungen aus DLL an das Hauptprogramm senden (https://www.delphipraxis.net/152097-daten-oder-anweisungen-aus-dll-das-hauptprogramm-senden.html)

Ookami 10. Jun 2010 23:09

Daten oder Anweisungen aus DLL an das Hauptprogramm senden
 
Hallo zusammen,

ich habe da mal noch ne Frage zum Thema DLL's. Speziell geht es mir darum, von einer DLL heraus Nachrichten an das Hauptprogramm zu senden.
Könnte ungefähr so aussehen.
Ich habe ein Programm, das mit mehreren DLL's zusammenarbeitet. Einige dieser DLL's enthalten eine TForm mit allem drum und dran.
Brauche ich jetzt Daten aus einer anderen DLL, müssen die Daten ja quasi doppelt geladen werden.
Um das zu vermeiden, möchte ich die Daten über das Hauptprogramm schicken an die 2. DLL schicken. Diese , schickt sie dann an das Hauptprogramm zurück und dieses leitet sie weiter an die 1. DLL. Was dann im Prinzip wie ein Server funktioniert.
Ich möchte aber nicht pollen auf der einen Seite oder so etwas Netzwerk also mit Indy's und so aufbauen. Jemand hier hat sich da mal mit PlugIns beschäftigt. Das ist aber jetzt auch nicht das was ich vorhabe.

Wäre schön, wenn mir das jemand Laienhaft evtl. mit kleinem Code-Beispiel klarmacht. So firm bin ich mit den DLL's noch nicht.

Zacherl 10. Jun 2010 23:42

AW: Daten oder Anweisungen aus DLL an das Hauptprogramm senden
 
Um was für Infos handelt es sich? Sind die Infos statisch oder ändern sie sich je nach Programmverlauf? Bei statischen Infos kannst du die DLL getrost aus der 2. DLL heraus nochmal neu laden und den jeweiligen Import aufrufen, der dir die Infos übergibt.
Wenn es sich um dynamische Daten handelt, dann könntest du einfach die üblichen IPC Methoden wie z.b. Memory Mapped Files oder Pipes verwenden. Du erstellst mit CreateEvent() ein named event und wartest in einem Thread der 2. DLL mit WaitForSingleObject. Wenn jetzt Daten anliegen, benutzt du SetEvent() aus der ersten DLL heraus. Der Thread in DLL 2 wird jetzt fortgesetzt resettet das Event mit ResetEvent() und kann nun die Daten auslesen.

idefix2 11. Jun 2010 06:52

AW: Daten oder Anweisungen aus DLL an das Hauptprogramm senden
 
Hallo,

für den einfachen Datenaustausch zwischen programmen habe ich einmal zwei Klassen programmiert:


http://www.delphipraxis.net/151224-klassen-fuer-einfache-ipc-interprozesscommunication.html


Vielleicht hilft Dir das Weiter.

Ookami 11. Jun 2010 12:58

AW: Daten oder Anweisungen aus DLL an das Hauptprogramm senden
 
Hallo Jungs,

zuerst mal Danke für die Tipps. Das mit den Events ist mir auch schon in den Sinn gekommen. So richtig glücklich bin ich aber noch nicht damit.
Mit den MMF oder auch Pipes habe ich noch nichts angestellt, auch in der Hinsicht also Null Erfahrung.

Ok, ich hätte mich an der Stelle präzieser ausdrücken sollen.

Ich habe ein Programm, das mit mehreren DLL's zusammenarbeitet die DYNAMISCH geladen werden. Einige dieser DLL's enthalten eine TForm mit allem drum und dran.
Brauche ich jetzt Daten aus einer anderen DLL, müssen die Daten ja quasi doppelt geladen werden.
Um das zu vermeiden, möchte ich die Daten über das Hauptprogramm schicken an die 2. DLL schicken. Diese , schickt sie dann an das Hauptprogramm zurück und dieses leitet sie weiter an die 1. DLL. Was dann im Prinzip wie ein Server funktioniert.

Idefix2: Aus deiner Antwort bin ich noch nicht ganz schlau geworden. Ich muss mir das später noch mal in Ruhe durchlesen.

Trotzdem mal Danke an euch beide

idefix2 11. Jun 2010 13:27

AW: Daten oder Anweisungen aus DLL an das Hauptprogramm senden
 
Wenn Du eine Kommunikation zwischen zwei Programmen haben willst, (Programm 1 schickt Daten an Programm 2, Programm 2 empfängt diese Daten und macht dann irgend etwas damit), dann sind die Klassen aus meinem vorigen Post genau das, was Du brauchst.

Wenn Du von allen Programmen aus einen direkten Zugriff auf die gleichen gemeinsamen Daten haben willst, verwendest Du am Besten ein MMF. Wenn Du das brauchst, kannst Du Dir auch in den Quelltexten den beiden Klassen anschauen, wie Du ein MMF verwendest, die verwenden intern ein MMF für die Kommunikation.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf