Kommunikation zwischen Programmen
-
Hallo
Ich habe ein Programm das ein LCD am Parallelport ansteuert.
Ich möchte dem Programm eine Art Schnittstelle verpassen damit andere
Programme, über das Programm, Informationen auf das LCD senden können.Ich dache da an eine DLL.
Diese DLL wird dann von dem LCD Programm und dem anderen Programm
gleichzeitig benutzt und dient als eine Art Relais.Um das mal zu testen habe ich mir ein Test-Programm und ein
Test DLL-Project erstellt.Folgende Quelltexte sind auf diesen Test-Projecten.
(Ich benutze einen BCB5)Project1.cpp des Test-Programms
USELIB("Project2.lib");Unit1.cpp des Test-Programms
// Funktionen, die aus der DLL importiert werden extern "C" __declspec(dllimport) void write_text(AnsiString text); extern "C" __declspec(dllimport) AnsiString read_text();Unit1.cpp des DLL-Projects
// Variable AnsiString message; // Funktionen für Export zur späteren Anwendung deklarieren extern "C" __declspec(dllexport) void write_text(AnsiString text); extern "C" __declspec(dllexport) AnsiString read_text();Wenn ich das Testprogramm starte kann ich einen String in der DLL
"lagern" und diesen dann wieder auslesen.Wenn ich das Testprogramm allerdings 2 mal starte, um den Betrieb von
2 Programmen zu simulieren kann jedes Programm nur den Text lesen den
es auch selber in die DLL geschrieben hat. Es ist so als gäbe es 2 DLLs.Was mache ich da falsch? Oder ist der ganze Ansatz falsch?
Ach ja dann wär da noch eine andere Sache die mich interessieren würde.
Ist es möglich das sich die DLL, wenn etwas neues in die Variable geschrieben
wurde, von alleine bei dem LCD-Programm meldet? Oder muss das LCD Programm,
Timergesteuert, immer nachsehen ob es was neues gibt?Gruss
Hudson
[code][cpp]
-
Zu dem DLL-Problem kann ich nichts sagen, aber für die Kommunikation kannst du auch einfach TCP/IP verwenden.
-
Sowie ich es verstanden hab, willst du die DLL als eine Art Schnittstelle benutzen, um zwischen 2 Programm Daten auszutauschen.
Das geht nicht so einfach, weil für jede DLL ein eigener Prozessraum angelegt wird.
Du könntest in der DLL Shard Memory benutzen und in diesen dann den Inhalt des Strings ablegen.Ist es möglich das sich die DLL, wenn etwas neues in die Variable geschrieben
wurde, von alleine bei dem LCD-Programm meldet?Dafür könntest du dir eine Ereignisroutine basteln und den Zeiger darauf der DLL übergeben. In der DLL müßte dann bei jeder Änderung diese Ereignisroutine aufgerufen werden.
Dafür würde ich dann aber lieber die Lösung von Jansen bevorzugen.
-
Danke für eure Antworten.
Ihr meint also ich sollte das Schnittstellenproblem als eine Art Client-Server-Lösung gestalten. Also das das LCD Proggi eine Socket aufmacht und andere Programme können dann an diesen Socket Nachrichten senden.
Ich werde das mal testen.
Gruss
Hudson