Bei den Standardeinstellungen von LabVIEW zur Erstellung einer Exe, erhält man den Fehler 7 wenn man die Anwendung startet. Folgende KB zeigt den Hintergrund und wie man dieses Problem lösen kann.
Die VI Treiber von Gantner Instruments (GI) welche in LabVIEW verwendet werden um auf die DLL zuzugreifen, beinhalten eine statische Pfadangabe. Wenn man nun in LabVIEW eine EXE Applikation erstellen möchte mit den Standard Einstellungen des Application Builder, dann kommt bei der Ausführung der kompilierten Applikation der Fehler 7.
Was bedeutet der Fehler?
Der Fehler selbst gibt schon eine Auskunft darüber, dass es einen Fehler gibt beim Aufruf einer externen Bibliothek (also unserer giutility.dll) und auch in welchem VI sich der Fehler befindet. Hintergrund ist, dass beim Initialisierungs VI von GI einmalig der Pfad zur DLL festgelegt wird und diese Informationen im Cluster (welcher durch jedes VI geschliffen wird) weiter gegeben wird. Das ist insofern sehr hilfreich, da eine Änderung nur an einer einzigen Stelle erfolgen muss.
Was muss getan werden um eine EXE Applikation zum Laufen zu bringen?
Der Lösungsweg ist ganz einfach und es gibt zwei Wege das Problem zu lösen. Im Grunde geht es darum, dass auch in der kompilierten und ausführbaren EXE Datei der Pfad richtig hinterlegt ist und die Applikation die notwendige DLL findet. Dazu gibt es zwei Wege:
- Ändern der Pfadeinstellungen in den "Build Spezifikationen" in LabVIEW
Standardmäßig ist der Pfad in dem die Gantner VI's die entsprechende DLL sucht immer hinterlegt mit dem Standardverzeichniss + instr.lib\GantnerInstruments\DLL\32bit\giutility.dll
Das Standardverzeichnis gibt in der Entwicklungsumgebung immer den Pfad dieser zurück. Also zum Beispiel: C:\Program Files (x86)\National Instruments\LabVIEW 2023.
Wenn das VI kompiliert wird, dann gibt das Standardverzeichnis den Pfad der kombilierten Applikation wieder. Also zum Beispiel:
D:\builds\ [Projektname] \ [Applikationsname]
Es folgt nun der statische String von unserem GI VI, nämlich instr.lib\GantnerInstruments\DLL\32bit\giutility.dll. Wenn man den Applikation Builder in seinen Standardeinstellungen lässt, würden alle Hilfsdateien, also auch die giutility.dll, in das Verzeichnis "Data" kopiert werden. Somit passen die Pfade nicht mehr und es kommt zum Fehler 7.
Es muss daher in den Eigenschaften des Application Builders der Zielpfad entsprechend angepasst werden.
Das funktioniert natürlich nur eingeschränkt so lange, wie nur die Treiber von GI als Hilfsdateien mitgegeben werden.
Sollten mehrere DLL's oder VIs verwendet werden im Hilfsverzeichnis, macht es Sinn nach anderen Lösungen zu suchen wie zusätzliche Hilfsverzeichnisse. An der Stelle muss man auf National Instruments als Support Partner verweisen. - Ändern der Programmierung durch hinzufügen eines neuen Cases "RUN_TIME_ENGINE == TRUE"
Eine weitere Möglichkeit ist, einen zusätzlichen Case hinzuzufügen. Dazu klickt man sich durch die VI's an jene Stelle, wo der Pfad zur DLL erstellt wird.
Initialize.vi >> eGateHSP_Init.vi
Durch das hinzufügen des Cases "RUN_TIME_ENGINE == TRUE", erkennt LabVIEW automatisch ob es sich um eine Exe oder eben Entwicklungsumgebung handelt. Danach wird der entspechende Pfad genommen.
Der Vorteil ist, dass in die Applikation unter dem Standard Hilfsverzeichnis verschiedene Bibliotheken oder Hilfprogramme hinzugefügt werden können und die Bezeichnung des Verzeichnis somit auch stimmig ist.
Weitere Quellen:
How Do I Add a DLL to a LabVIEW EXE?
Error 7 in Executable When Using the Current VI's Path Constant
LabVIEW Executable Cannot Find DLL
LabVIEW bietet natürlich noch eine vielzahl weiterer professioneller Möglichkeiten an welche je nach Applikation zu verwenden sind. Hierfür verweisen wir dann aber an National Instruments und deren Supportangebot.