27.03.2012, 10:41
Beitrag #1
|
|
|
27.03.2012, 10:44
Beitrag #2
|
|
|
27.03.2012, 19:30
Beitrag #5
|
|
|
28.03.2012, 10:10
Beitrag #6
|
ofahed
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Mar 2012
8.2,8.5,2010,2011
2005
EN
6004
Schweiz
|
RE: DLL-Aufruf ohne Halt
Hallo Trinitatis, Hallo Rolf,
Leider sitze ich in der gleichen Situation. Bis auf bei mir gehört dieses zum Anforderungsprofil, das eine EXE dynamisch DLLs laden kann.
Hinsichtlich der Ausführung ist das ganze auch kein Problem, halt nur nicht performant beim ersten Aufrufens der DLLs.
@Rolf irgendwie wie ist dein Name gefallen: "your are the man" wenn es um DLL und die lvrt.dll also hoffe das ich richtig die Frage addressiere.
auf ni.com steht folgendes:
„Nutzen alle DLLs dieselbe Version der LabVIEW Run-Time Engine und das Laden der DLLs geschieht dynamisch, empfiehlt National Instruments, dass Sie die LabVIEW Run-Time Engine dynamisch durch Laden der Datei lvrt.dll laden, bevor Sie eine der in LabVIEW erstellten DLLs laden. Ein Laden der LabVIEW Run-Time Engine vor dem Laden der DLLs verringert Overhead, indem die Run-Time Engine am Laden und Entladen gehindert wird, wenn die DLLs vom Speicher ge- und entladen werden.“
Original-Link: http://zone.ni.com/devzone/cda/tut/p/id/8364
Leider zur "LVRT.dll" konnte ich keinerlei Infos noch die Headerfile finden. Die Funktionen sind zwar ersichtlich, aber die Inputs/Outputs nicht . Vielleicht mag dieses auch der falsche Ansatz sein.
Ich hoffe mal Du kannst mir hier bei weiterhelfen.
Auch Vielen Dank im vorraus
Gruss Olli
|
|
|
28.03.2012, 19:17
(Dieser Beitrag wurde zuletzt bearbeitet: 28.03.2012 19:19 von rolfk.)
Beitrag #7
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: DLL-Aufruf ohne Halt
(28.03.2012 10:10 )ofahed schrieb: auf ni.com steht folgendes:
„Nutzen alle DLLs dieselbe Version der LabVIEW Run-Time Engine und das Laden der DLLs geschieht dynamisch, empfiehlt National Instruments, dass Sie die LabVIEW Run-Time Engine dynamisch durch Laden der Datei lvrt.dll laden, bevor Sie eine der in LabVIEW erstellten DLLs laden. Ein Laden der LabVIEW Run-Time Engine vor dem Laden der DLLs verringert Overhead, indem die Run-Time Engine am Laden und Entladen gehindert wird, wenn die DLLs vom Speicher ge- und entladen werden.“
Original-Link: http://zone.ni.com/devzone/cda/tut/p/id/8364
Leider zur "LVRT.dll" konnte ich keinerlei Infos noch die Headerfile finden. Die Funktionen sind zwar ersichtlich, aber die Inputs/Outputs nicht . Vielleicht mag dieses auch der falsche Ansatz sein.
Die Bemerkung zur lvrt.dll wenn man mehrere LabVIEW DLLs verwendet ist zwar scön angedacht aber nicht gut durchgedacht. Denn das Problem ist gerade, die richtige DLL zu finden. lvrt.dll ist jeweils in einem versionsabhängigen Verzeichnis installiert, dessen Pfad man aber nicht hardwiren kann, da die Stelle wo die Runtimes installiert werden benützerdefinierbar ist. Die NI Art um das zu lösen, ist zur Zeit ein Registryeintrag der angibt wo die jeweilige Runtime installiert ist. Aber das ist zwar für alle bisher bestehende LabVIEW Versionen so, aber niemand kann garantieren, dass das in Zukunft so bleibt und wenn Du das in Deine Applikation so einbaust geht es hässlich verkehrt wenn NI das jemals ändert und Du dann auf diese LabVIEW Version upgraden willst.
Eine bessere Variante ist deshalb um eine Dummy DLL mit Dummy Funktion in der selben LabVIEW Version zu machen und diese durch eine Call Library Node im Hauptprogramm zu laden. Wenn das Hauptprogramm in den Speicher geladen wird, wird auch diese Dummy DLL in den Speicher geladen und die lokalisiert die LabVIEW Runtime DLL in der richtigen Weise für die aktuelle LabVIEW Version, in der die DLL gemacht wurde. Wenn Du dann alle anderen plugin DLLs in der selben LabVIEW Version erstellst, brauchen diese die lvrt.dll nicht mehr zu laden, was einiges and Ladezeit spart.
|
|
|
29.03.2012, 14:57
Beitrag #8
|
Trinitatis
LVF-Guru
Beiträge: 1.694
Registriert seit: May 2008
7.1 / 8.0 /2014-1, 18
2002
DE
18055
Deutschland
|
RE: DLL-Aufruf ohne Halt
Hallo Rolf,
entschuldige die verspätete Antwort, aber ich wollte doch noch ein Lebenszeichen von mir geben.
Ich habe mich mal etwas in das Erstellen von Projektbibliotheken (die ja wohl zwingend erforderlich scheint für das Erstellen einer komprimierten Bibliothek) eingelesen. Jetzt muss ich dann nur noch testen, ob ich aus einer später erstellten komprimierten Bibliothek die VIs einfach so auslesen kann, wie ich das früher in LV 80 mit den DLLs betrieben habe, nämlich so zu tun, als sei diese Bibliothek ein Verzeichnis.
Weißt Du denn auch, wie sich das so mit LLBs verhält, die ich in meinem user.lib-Verzeichnis habe? Dort habe ich so einige VIs in thematisch gegliederten LLBs liegen, auf die ich bei der Programmierung dann unter der Palette "eigene Bibliotheken" zugreifen kann. Müssen diese LLBs mit in die Projektbibliothek eingebunden werden, die dann als Startbibliothek in der komprimierten Bibliothek verwendet wird, oder werden die VIs der LLBs beim Erstellen der komprimierten Bibliothek sowieso mit eingebunden, wenn VIs, die in der Projektbibliothek liegen auf sie zugreifen?
Gruß, Trinitatis
|
|
|
29.03.2012, 15:43
Beitrag #9
|
ofahed
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Mar 2012
8.2,8.5,2010,2011
2005
EN
6004
Schweiz
|
RE: DLL-Aufruf ohne Halt
Hallo Rolf,
Vielen Dank für deine schnelle Antwort und Ratschläge.
Die Idee mit der Dummy Function hatte ich angewendet, aber vielleicht läuft bei meinen DLLs etwas grundlegendes falsch. Obwohl die Dummy Function geladen wurde beträgt die erste Ladezeit immer noch 5 Sekunden. Zu mindest eine Verbesserung von 2 Sekunden .
Aber da sollte doch eigentlich mehr drin liegen oder nicht?
Gruss Olli
|
|
|
30.03.2012, 09:54
|
ofahed
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Mar 2012
8.2,8.5,2010,2011
2005
EN
6004
Schweiz
|
RE: DLL-Aufruf ohne Halt
mhhh ok also ich habe auch rausgefunden warum diese zeitbeansprucht wurde.
Das Problem lag daran das ich einen Enum(Init, Main, Close) benutzt habe, der Enum wurde von der DLL ignoriert und nur das Defaultcase ausgeführt.
Da ich noch nicht soviele Erfahrungen mit dem compilieren und der Dlls in LabView habe, sind Enum is prinzipiell möglich?
Gibt es gewisse Regeln die man beachten sollte beim Compilieren?
vielen dank im vorraus und gruss,
Olli
|
|
|
| |