LabVIEWForum.de
VIs aus DLL aufrufen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: VIs aus DLL aufrufen (/Thread-VIs-aus-DLL-aufrufen)



VIs aus DLL aufrufen - Trinitatis - 24.11.2011 10:41

Hallo Zusamman,

vielleicht kann mir ja hier jemand helfen:

Ich habe eine DLL aus verschiedenen VIs und deren Sub-VIs erstellt. Diese DLL (für eine Kundenapplikation) soll nun immer bei einem Update beim Kunden ausgetauscht werden (Soll also auch eine DLL bleiben). In dieser DLL befinden sich verschiedene Unterprogramme (Tools) mit eigenem Frontpanel. In LV 8.0 habe ich mit der Funktion "VI-Referenz öffnen" auf den Pfad der DLL und dem darin befindlichen aufzurufenden VI verwiesen und mit der Methode "VI ausführen" dieses Tool gestartet. Ich habe die DLL bei der Pfadzuweisung behandelt, als wäre sie ein Verzeichnis, was auch funktionierte.
In LV 2011 funktioniert das nicht mehr auf diese Weise, da hier die DLL nicht mehr wie ein Verzeichnis behandelt wird - hier kann ich nur mit dem Knoten "Aufruf externer Bibliotheken" arbeiten, habe aber dort das Problem, dass das aufrufende VI solange bei diesem Knoten stehen bleibt, bis das aufgerufene VI wieder geschlossen wurde. Ich möchte aber nacheinander verschiedene Tools aus dieser DLL aufrufen und das aufrufende VI soll nach diesen Aufrufen auch noch einiges tun, quasi parallel zu den Tools.

Weiß da jemand Rat, wie ich das mit einer DLL realisieren kann?


RE: VIs aus DLL aufrufen - jg - 24.11.2011 10:47

Nur so eine Idee:
Erstellst du die DLL in 2011 auch mit gesetzter 8.x File-Layout Option? Damit du weiterhin eine flache Verzeichnisstruktur hast?
[attachment=37385]
Ich tippe mal, dass dann der Aufruf so wie in 8.0 wieder funktionieren könnte.

Gruß, Jens


RE: VIs aus DLL aufrufen - rolfk - 24.11.2011 11:24

(24.11.2011 10:47 )jg schrieb:  Nur so eine Idee:
Erstellst du die DLL in 2011 auch mit gesetzter 8.x File-Layout Option? Damit du weiterhin eine flache Verzeichnisstruktur hast?

Ich tippe mal, dass dann der Aufruf so wie in 8.0 wieder funktionieren könnte.

Gruß, Jens

Eher nicht! Die Möglichkeit um VI's aus einem Executable (und eine DLL ist in diesem Sinn auch ein Executable) aus LabVIEW mittels Pfad aufrufen zu können wurde von einigen Fanatisten als schwerstes Sicherheitsrisiko angesehen, da jemand dann deren ach so wertvolle "Intelectual Property" auf diese Weise stehlen könnte. NI hat darauf reagiert und in LabVIEW 8.2 glaube ich, diese Möglichkeit schlichtweg unmöglich gemacht und eine Revision dieser Massnahme ist höchst unwahrscheinlich.

Bis in LV 2009 ist es aber trivial um so ein Executable noch wie ein ZIP File zu öffnen (wenn man das neue Executable Layout verwendet).


RE: VIs aus DLL aufrufen - jg - 24.11.2011 11:55

Wie sieht es aus, bei einer Exe geht es ja, bei installiertem LV-Webservice das FP eines VIs aufzurufen und zu bedienen.
Vielleicht geht das auch bei einer DLL?!

Gruß, Jens

P.S.: Wie immer danke an Rolf für diese tiefen LV-Einblicke. Top1


RE: VIs aus DLL aufrufen - Trinitatis - 24.11.2011 12:57

Gibt es denn überhaupt irgend eine Möglichkeit, aus einer DLL heraus nacheinander verschiedene VIs zu öffnen, ohne dass das aufrufende VI bei jedem Aufruf stehenbleibt?


RE: VIs aus DLL aufrufen - rolfk - 25.11.2011 10:52

(24.11.2011 12:57 )Trinitatis schrieb:  Gibt es denn überhaupt irgend eine Möglichkeit, aus einer DLL heraus nacheinander verschiedene VIs zu öffnen, ohne dass das aufrufende VI bei jedem Aufruf stehenbleibt?

Ich weiss es nicht sicher. Der erste Schritt wäre natürlich um die Call Library Node als reentrant zu konfigurieren, aber ich wage es zu bezweifeln dass damit alle Probleme beseitigt sind. Die "richtige" Weise dazu ist um eben nicht eine DLL zu benützen, da LabVIEW sowohl in der Call Library Node als auch im C Wrapper der innerhalb der DLL um jedes exportierte VI gestrickt wird, ziemliche Klimmzüge macht um zwischen dem LabVIEW orientierten Parameterinterface im Heap und dem C orientierten Parameterinterface auf dem Stack zu vermitteln.

Alternativen dazu sind entweder LabVIEW LLBs oder wenn es eine neuere LabVIEW Version sein darf, die VI Libraries.