' schrieb:Hallo,
ich habe folgende Situation:
Ich habe zum Einen mit LabVIEW eine DLL erstellt, die mehrere Funktionen zur Verfügung stellt. Beim Aufruf einer der DLL-Funktionen passiert nichts weiter als dass ein Datensatz in eine Queue geschickt wird.
Dann habe ich noch meine Hauptanwendung: Sie wartet auf Elemente in einer gleichnamigen Queue und soll die Daten dann verarbeiten und anzeigen.
Jetzt läuft also die Hauptanwendung (aus der LV IDE oder als exe) und wartet auf Daten.
Von einem anderen Programm (hier: Python Skript) wird die DLL verwendet und die verschiedenen Funktionen aufgrerufen.
Leider kommt jetzt in meiner Hauptanwendung über die Queue nix an. Die LabVIEW Anwendungen wurden alle mit der selben Version (8.5) erstellt.
Ich arbeite in den DLL Funktionen mit "Element einfügen" und in der Hauptanwenung mit "Element aus Queue entfernen".
Ist das bei dieser Kombination aus LV-DLL und EXE nicht möglich? Oder hab ich vielleicht doch was übersehen?
Danke schonmal im Voraus.
Robert
Das geht nicht. Queues sind einfach ein wenig Speicher innerhalb des Prozesses der sie started. Es ist sogar so dass Queues in LabVIEW innerhalb eines bestimmten Applikationskontextes existieren. Das heisst ein VI das von einem Projekt gestartet wurde und eine Queue "X" verwendet hat keine Möglichkeit um über Queues mit einem VI zu kommunizieren das aus einem anderen Projekt (oder dem globalen Applikationskontext, also ohne Projekt) aufgerufen wurde.
In Deinem Fall läuft die LabVIEW DLL unter dem Python Prozess (und die Queue wird vom LabVIEW Runtime System implementiert die durch diese DLL innerhalb des Python Prozesses instantiert wird). Deine LabVIEW IDE (oder ein LabVIEW executable) hat absolut keine Möglichkeit in den Speicher des Python Prozesses zu schauen. Das sind die Folgen von Speicherschutz in moderenen OSen und der Grund warum Applikation A nicht mehr wie in Windows 3.1 Tagen alle anderen Applikationen mit in den Abgrund reissen kann wenn sie spinnt.
Um Informationen zwischen Deinem Python Prozess und der LabVIEW Applikation auszutauschen wirst Du Inter-Applikation-Communication verwenden müssen, wie etwa externe Files (einfach aber nicht sehr effizient und elegant), TCP/IP Kommunikation (sehr flexibel und recht effizient aber nicht ganz trivial wobei Dir hier VI Server viel Arbeit abnehmen könnte), Shared Memory (erfordert Windows API Programmierung), oder Pipes (ebenfalls Windows API Programmierung).
Rolf Kalbermatter