Hallo alle zusammen,
ich habe mehrere DLL File, die von einander abhängig sind.
Für der erste DLL habe ich eine C_Wrapper geschrieben, damit ich die Funktionen aufrufe.
Zu dieser DLLs ist auch einen file.ini, der gebraucht ist.
Dieses file.ini wird auf DLL seite aufgerufen und gelesen.
Das Thema wurde auch behandelt hier das Links:
http://www.labviewforum.de/Thread-DLL-fi...-einbinden
(11.08.2011 13:50 )rolfk schrieb: (11.08.2011 10:47 )pga schrieb: Hallo zusammen,
ich benutze gerade zum ersten mal Labview und komme nicht so recht weiter. Leider konnten mir Google und die Forensuche nicht weiter helfen.
Ich habe eine DLL ohne Header-Datei. In der Doku sind die Funktionen beschrieben, sodass ich die DLL mittels Call Lib Function Node einbinden kann. Einige Funktionsaufrufe funktionieren auch, allerdings benötigt eine bestimmte Funktion eine weitere DLL. vi-Datei und die beiden DLLs liegen alle im selben Verzeichnis. Muss ich die DLL noch in ein Labview-Verzeichnis kopieren?
Leider habe ich keinerlei Header, sodass das Einbinden via Labview "import" flach fällt.
Viele Grüße,
Philipp
Abhängige DLLs werden nicht von LabVIEW geladen sondern von Windows wenn LabVIEW das Laden der Haupt-DDL verlangt. Windows sucht nur in folgenden Orten:
1) Wenn die DLL mit dem Namen schon im Speicher ist, dann wird die verwendet.
2) Ansonsten wird im Applikationsverzeichnis geschaut (das ist wo LabVIEW.exe ist)
3) Dann wird im Windows Verzeichnis geschaut
4) Danach im System Verzeichnis
5) Zuletzt in allen Verzeichnissen die in der PATH Environment Variablen aufgeführt sind.
3) und 4) fallen eigentlich aus für einen sauberen Lösungsansatz da man nicht unnötigerweise DLLs in diese Verzeichnisse legen sollte
Daher bieten sich folgende Lösungsansätze an:
1) Das Verzeichnis wo die DLL ist in die PATH Variable mitnehmen
2) Die DLL in das Verziechnis kopieren wo LabVIEW.exe ist, wenn Du dann eine Applikation baust musst Du nicht vergessen diese DLL explizit in das Verzeichnis zu installieren wo <myapp>.exe liegt.
3) Durch ein LabVIEW VI eine der Funktionen der DLL in den Speicher laden, bevor das, VI das die andere DLL benötigt geladen wird. Dieses VI würde nicht ausgeführt sondern sorgt nur dafür dass die DLL schon im Speicher ist wenn das andere VI die DLL zu laden versucht.
--> Variante Nr:1:
es funktioniert nicht.
-->Variante Nr:2:
Ja aber unschön
-->Variante Nr:3:
Etwas genauer bitte.
Was ist mein Problem:
1) Wie kann ich alle DLL mittels LabView in einen bestimmten Ordner anlegen und Labview sagen, dass er von dort die DLL lesen muss?
--> Lösungsansatz von Rolf (3): kannst du bitte etwas genauer beschreiben?
2) Wie kann ich den LabVIEW sagen, dass er die file.ini von dort lesen muss?