Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Hallo LabVIEW User,
ich muss für mein Projekt eine dll einbinden! Nur habe ich unter LAbView nicht soviel Ahnung! also ich habe hier alle möglichen Beiträge gelesen und auch probiert nur versteh ich nicht warum nix geht!
Ich habe auch Beispiel Programme oder Vi´s wo diese dll schon eingebunden ist!
Aber wie finde ich heraus wie das gemacht wurde?? kann man das irgendwo sehen ????
Es sind viele Funktionen in dieser dll! zu jeder Funktion besteht sogar schon eine Vi Sammlung. Aber ich würde gern wissen wie diese dll eingebunden wurde???
Mir würde es sogar reichen (nicht zufriedenstellen!) wenn ich eine neue Version der schon implementierten dll statt der implementierten dll tauschen könnte?? geht das?
Generell: DLL-Einbindung gehört zum Fortgeschrittenen-Level unter LV. Je nach Art der Funktionsaufrufe kann das von einfach über extrem kompliziert bis zu unmöglich reichen. Und man sollte neben LV auch noch was von textbasierten Sprachen verstehen...
Auch in der Hilfe von LV steht doch so einiges. Such z.B man nach der "Call Library Function Node".
Dann gibt es da noch den Import Assistenten unter "Tools->Import->Shared Library". Der liefert teils sehr gute Ergebnisse, solange die Dateitypen in den Funktionen der DLL nicht zu kompliziert sind.
MfG, Jens
P.S.: Leider erzählt mir meine Kristallkugel nichts über deine dll, somit kann ich dir auch nichts über das Einbinden deiner dll erzählen.
Ach ja, und falls sich die Funktionsaufrufe nicht geändert haben, dann sollte es ohne große Probleme möglich sein, eine dll auszutauschen.
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Generell: DLL-Einbindung gehört zum Fortgeschrittenen-Level unter LV. Je nach Art der Funktionsaufrufe kann das von einfach über extrem kompliziert bis zu unmöglich reichen. Und man sollte neben LV auch noch was von textbasierten Sprachen verstehen...
Auch in der Hilfe von LV steht doch so einiges. Such z.B man nach der "Call Library Function Node".
Dann gibt es da noch den Import Assistenten unter "Tools->Import->Shared Library". Der liefert teils sehr gute Ergebnisse, solange die Dateitypen in den Funktionen der DLL nicht zu kompliziert sind.
MfG, Jens
P.S.: Leider erzählt mir meine Kristallkugel nichts über deine dll, somit kann ich dir auch nichts über das Einbinden deiner dll erzählen.
Ach ja, und falls sich die Funktionsaufrufe nicht geändert haben, dann sollte es ohne große Probleme möglich sein, eine dll auszutauschen.
Hallo Jens. Danke erstmal für deine Antwort.
Das tutorial habe ich auch durchgearbeitet ja. Danke.
Mir gefällt dein letzter Satz! Das man eine dll leicht austauschen kann!! das hört sich gut an.
Ich habe hier ein kleines Prog wo die dll eben schon drin ist! Sieht man wo die ist? wie sie genutzt wird?
und wie kann ich die eben austauschen?
die beigefügte dll ist z.B. eine neuere Version und das beigefügte Prog hat noch die alte Version intus!
' schrieb:Das man eine dll leicht austauschen kann!!
Austauschen heißt eigentlich: Auf der Platte ersetzen.
Irgendwo auf der Festplatte muss die DLL, die von einem Programm verwendet wird, ja abgelegt sein. Und genau diese DLL wird duch eine andere respektive neue ersetzt. Aber: Der Name der DLL muss gleich bleiben - und deren Schnittstelle!
Ändert sich entweder der Name oder, was schlimmer ist, die Schnittstelle, dann muss das (LV-)Programm selbst angepasst werden.
Zitat:Ich habe hier ein kleines Prog wo die dll eben schon drin ist! Sieht man wo die ist? wie sie genutzt wird?
Es gibt einen sog. DLL-Knoten. Der ist die Schnittstelle von LV zur DLL. Der Knoten selbst ist nicht die DLL, eben nur die Schnittstelle.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Hallo, OK also das mit dem Knoten habe ich jetzt verstanden! Ich habe es auch gefunden, wie sie angebunden ist! Ich verstehe es so und da bitte ich euch mich zu verbessern wenn ich falsch liege:
Ich habe eine .LLB Datei, in der alle Möglichen Befehle der .DLL als VI hinterlegt sind! Das bedeutet das ist doch meine Library. Wenn ich mir so ein VI (Befehl) näher ansehe, gibt es eben pro Befehl (VI) einen Knoten (siehe Bild) der eben die Schnittstelle zur Kommunikation mit der .DLL ist?
Was mich noch interessiert ist aber: in diesem Ordner wo die .LLB liegt liegt noch ein kleines Programm bei (.vi) und sonst nix! Muss dann diese DLL in dem Ordner liegen in dem ich arbeite? Weil ich beides nutzen kann und es wird nicht gejammert, das die DLL abginge? Oder sucht sich das Programm die DLL denn die liegt im übergeordneten Ordner? Oder hat sie einen Absoluten Pfad? wenn ja wo sehe ich diesen?
Danke euch allen für die tollen Antworten! Ich habe jetzt verstanden das eine DLL anzusprechen schon sehr tief in die Programmierung geht! Und da ich eh alle Befehle aus der DLL als VI´s habe muss ich nur noch wissen wie man diese sauber austauscht, deshalb diese Fragen mit den Ordnern und Pfaden.
' schrieb:Ich habe eine .LLB Datei, in der alle Möglichen Befehle der .DLL als VI hinterlegt sind! Das bedeutet das ist doch meine Library. Wenn ich mir so ein VI (Befehl) näher ansehe, gibt es eben pro Befehl (VI) einen Knoten (siehe Bild) der eben die Schnittstelle zur Kommunikation mit der .DLL ist?
Ja, dem kann ich in allen Punkten so zustimmen.
Zitat:Muss dann diese DLL in dem Ordner liegen in dem ich arbeite?
Nicht zwangsläufig.
Mach einen Doppelklick auf den DLL-Knoten. Dann siehst du in der ersten Maske ganz oben den DLL-Namen - möglicherweise zusammen mit dem Pfad, in dem die DLL liegt. Ist hier alles komplett angegeben, so findet die EXE die DLL sofort. Kann die Applikation die DLL nicht sofort finden, suchst sie in diversen Pfaden. Wird die DLL gar nicht gefunden, kommt eine Fehlermeldung.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Mach einen Doppelklick auf den DLL-Knoten. Dann siehst du in der ersten Maske ganz oben den DLL-Namen - möglicherweise zusammen mit dem Pfad, in dem die DLL liegt. Ist hier alles komplett angegeben, so findet die EXE die DLL sofort. Kann die Applikation die DLL nicht sofort finden, suchst sie in diversen Pfaden. Wird die DLL gar nicht gefunden, kommt eine Fehlermeldung.
Stimmt alles. Hier zur Verdeutlichung:
Wenn ein kompletter Pfad angegeben ist versucht LabVIEW die DLL von diesem Path zu laden. Die Windows Funktion die das macht produziert einen Fehler wenn die DLL dort nicht vorhanden ist.
Wenn LabVIEW von dieser Windows Funktion einen Fehler zurückbekommt oder der Pfad ohnehin nur relativ ist, nimmt LabVIEW den DLL-Namen alleine und versucht es so noch einmal.
Windows sucht dann in folgenden Stellen und in dieser Reihenfolge:
1) Im gemappten Prozessspeicher, wenn die DLL schon durch ein anderes Teil des Prozesses geladen wurde (oder es ist eine System DLL wie etwa kernel32.dll) ist sie bereits im Speicher und braucht nicht nochmals geladen zu werden.
2) Im Verzeichnis wo das Executable liegt das den aktuellen Prozess gestartet hat (LabVIEW.exe im LabVIEW Entwicklungssystem oder Dein App.exe für eine kompilierte Applikation).
3) Im Windows Verzeichnis
4) Im System Verzeichnis von Windows
5) In einem der Pfade die in der PATH Umgebungsvariable aufgelistet sind.
Wenn die DLL dann noch immer nicht gefunden wird liefert Windows einen Fehler zurück und LabVIEW behandelt das VI als unausführbar (Run-Pfeil ist unterbrochen).