DLL für die Kommunikation zwischen zwei Programmen
-
Ich kenne von verschiedenen Simulationsprogrammen, das es eine Schnittstelle gibt, mit der man Daten zwischen den verschiedenen Programmen austauschen kann.
Wie kann ich mit Hilfe dieser Schnittstelle, welche mir in einer DLL Zugriff auf die Funktionen des Simulators bietet, Daten zwischen zwei Programmen(mein Eigenes und dem Simulationsprogram) austauschen.
Als Hintergrund:
Ich möchte Datensätze nutzen, welche mir für einen bestimmten Arbeitspunkt einen interpolierten Wert liefert.Die Schritte die in der DLL abgearbeitet werden
1. Initialize
2. Prepare
3. Simulate
4. Validate
5. CloseSchritt 3 und 4 werden während der Simulation stehts wiederholt, so dass man für jeden Simulationsschritt Werte ändern kann.
Für Anregungen und Verweise auf ähnliches wäre ich sehr dankbar. Das ist leider so speziell, das ich darüber nichts gefunden habe.
-
http://www.functionx.com/visualc/libraries/win32dll.htm
Servus,
Ich habe bisher noch nicht dieses Problemstellung gehabt. Ich denke,dass ich mit etwas Zeit(die leider knapp ist), etwas hinbekommen kann. Aber wie sieht es mit der Aufruf Reihenfolge aus.Kann ich das irgendwie in eine bestimmte Reihenfolge zwingen?
Logisch ist ja, dass zuerst der Arbeitspunkt vom Simulator berechnet wird.
Dann das Ergebnis im Zielprogram zur Interpolation der Daten genutzt wird.
Dieses Ergebnis zurückgegeben für den nächsten Zeitschritt gilt.
... und alles wieder von vorne anfängt.Bietet MFC dazu etwas, was ich bis dato noch nicht gefunden habe?
-
Ich weiss nicht genau, ob ich dich richtig verstanden habe.
Du hast eine Applikation A, die mit Applikation B Daten austauschen will. Dazu schreibt A Daten in die Dll und B liest die Daten aus der Dll???
-
Genau. Diese Schnittstelle wird vom Hersteller bereitgestellt. Ich schreibe dann dazu eine Erweiterung.
-
Ich bin mir nicht sicher, ob man in einer Dll einfach so in eine globale Variable schreiben kann und dann von einer anderen Applikation diese globale Variable auslesen kann.
Die Dll wird zwar egal wie viele Applikationen darauf zugreifen nur einmal in den Speicher geladen. Die Instanzen legt jedoch jede Applikation für sich an. Da kann man nicht einfach Daten hin nd her schaufeln.Was du aber machen könntest, ist in eine gemeinsame Datenbank oder Datei zu schreiben und wieder zu lesen. Für die korreckte Abfolge musst du dich aber selber kümmern. Wenn die Datei geade von App A blockiert ist, kann halt App B nicht darauf zugreifen. Das kannst du aber selber steuern.
-
So mache ich es zur Zeit. Leider müssen in dieser Lösung oft zweimal die gleichen Berechnungen in den jeweiligen Programmen durchgeführt werden. Mit dieser Schnittstellenlösung wäre es mir möglich, die zeitdiskrete Abfolge der Programmes A mit einer wertdiskreten Berechnung(z.B. Mittelungen) des Programmes B zu erweitern. Damit diese Berechnungen aber zum richtigen Zeitpunkt an der richtigen Stelle landen, brauche ich eine Möglichkeit Daten austauschen zu können.
Ich kenne keine Quelle, die mir Informationen über solche Themen bietet. Es kann wohl kaum Neuland sein, denn so was ist schon vorhanden. Aber wie immer keine Infos erhältlich, weil Betriebsgeheimnis. Und der Hersteller sagt auch nichts dazu.
-
Klar kann man Globale Daten in einer DLL für verschiedenen Programme vorhalten.
Nennt sich dann Sharedmemory.
z.B.
#pragma data_seg ("shared") char globstring[256][64] = {'\0'}; #pragma data_seg() #pragma comment(linker,"/SECTION:shared,RWS")Musst nur sicherstellen das nicht beide gleichzeitig da reinschreiben.