INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?



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!

22.07.2008, 16:38 (Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2008 16:44 von Y-P.)
Beitrag #1

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
Hallo,

zuerst einmal:
Ich weiß, wie ich dynamisch aufgerufene VIs in eine EXE einbinde (bei "Source Files" unter "Always Included") und die Einbindung funktioniert auch, nur wundert mich, wie das genau funktioniert.

Wie in meinem ersten Screenshot zu sehen ist, rufe ich ein VI so auf, indem ich einen Plugin-Namen aus der Datenbank hole und den Pfad für das entsprechende Plugin zusammensetze. Der Aufruf funktioniert in der Entwicklungsumgebung natürlich, weil es diesen Pfad gibt. In meiner EXE gibt es aber diesen "Plugin"-Ordner nicht, aber der Aufruf funktioniert trotzdem.

Meine Frage nun:
Wo hinterlegt LabVIEW die Information zu meinem dynamisch aufgerufenen VI?

Die zweite Frage (zu meinem 2. Screenshot):
Wie weiß LabVIEW bei so einem Aufruf (diesmal Applikation und EXE), wo sich das VI genau befindet (dies ist übrigens auch ein VI, dass ich bei "Always included" angegeben habe)? Das habe ich so programmiert und es funktioniert auch problemlos, wieso wundert mich aber doch irgendwie. Ich vermute höchstens, dass LabVIEW das aktuelle Projekt durchsucht und da dann das VI findet.

Normal ist LabVIEW doch empfindlich was Pfade angeht.

       

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2008, 18:46 (Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2008 18:50 von cb.)
Beitrag #2

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
ich könnt jetz lang und breit was über dies und jenes erzählen, aber am einfachsten erklärt sich das ganze dann doch durch ein "AHA-Erlebnis"

mach mal folgendes in der Entwicklungsumgebung: leg das dynamische VI mal irgendwo in dein Block-Diagramm und mach eine Disable-Struktur drum.

Bei deinem dynamischen Aufruf nimmst du mal den ganzen Pfad weg und hängst statt dem Pfad nur eine String-Konstante mit dem Dateinamen ("blablablab.vi") dran.

Und siehe da: wie von Zauberhand geht das auch ohne PfadeWink

In deiner Exe mach mal folgendes: Bastel dir einen Dialog, der dir den Inhalt von "all VIs in Memory" in einem Array anzeigt. Wenn du dein dynamisches VI beim Build eingebunden hast, wirst du es in dieser Liste wieder finden ...

Anschließend ersetzt du deine dynamisch erstellte VI Referenz durch eine statische und stellst fest, dass man den ganzen Kram mit Pfad zusammenbauen, etc. gar nicht mehr braucht und dass man ein per statischer VI Referenz eingebundenes VI auch nicht mehr bei "allways include" angeben muss, weil es schon in der VI Hierarchi drin istWink

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2008, 19:59
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
' schrieb:Wie weiß LabVIEW bei so einem Aufruf (diesmal Applikation und EXE), wo sich das VI genau befindet (dies ist übrigens auch ein VI, dass ich bei "Always included" angegeben habe)?
Naja, sagen wir mal so: Das VI wird schlicht und einfach - wie alle anderen (sprich statische) auch - in der EXE hinterlegt. Und da sind alle Pfade überflüssig.

Das "Always included" ist eigenlich nur dazu da, dem Linker zu sagen, dass hier noch ein VI ist, das eingebunden werden muss. Statisch aufgerufene VIs kennt bereits der Kompiler, in folge dann auch der Linker.

So stell ich mir das vor (meistens sind meine Vorstellungen richtig Cool) - aber: so sehr interessiert mich das nicht. Blush


Nur:
Das von i2dx kann ich jetzt nicht so nachvollziehen (möglicherweise hab ich da aber was missverstanden).
Zitat:Anschließend ersetzt du deine dynamisch erstellte VI Referenz durch eine statische und stellst fest, dass man den ganzen Kram mit Pfad zusammenbauen, etc. gar nicht mehr braucht und dass man ein per statischer VI Referenz eingebundenes VI auch nicht mehr bei "allways include" angeben muss, weil es schon in der VI Hierarchi drin ist
Heißt das jetzt irgendwo, dass man "Always included" nicht braucht, wenn das VI in einer Disable-Struktur liegt? Huh

Meine dynamischen VIs hab ich immer in einer Disable-Struktur liegen und zwar in dem VI, in dem sie eben aufgerufen werden. (Das hat den Vorteil, man kann sie mit Doppelklick öffnen). Wenn ich jetzt aber "Always included" nicht mache, dann sind diese VIs in der EXE auch nicht vorhanden, also nicht ausführbar.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2008, 20:38 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2008 05:39 von Y-P.)
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
Was ich dann aber nicht verstehe, ist wieso es dann manchmal so wichtig ist, die richtigen Pfade anzugeben (wie im Bsp.).


Sonstige .vi  Shared_Variable_deployen__localhost_.vi (Größe: 9,48 KB / Downloads: 390)

Lv85_img

Gruß Markus


Angehängte Datei(en) Thumbnail(s)
   

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2008, 21:28
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
' schrieb:Was ich dann aber nicht verstehe, ist wieso es dann manchmal so wichtig ist, die richtigen Pfade anzugeben (wie im Bsp.).
So genau weiß ich das auch nicht. Aber:

Es gibt solche dynamische und solche. Die einen, siehe dein rechtes Bild oben, werden per "Always included" eingebunden und sind daher praktisch ohne Pfad aufrufbar. Solche VIs sind eigenlich nicht richtig dynamisch. Dynamisch sind sie eigentlich nur deswegen, weil sie applikationsspezifisch explizit über "VI-Server" (für SubPanel etc.) aufgerufen werden. Solche VI's werden zur Kompilierzeit eingebunden.

Dann gibt es aber auch solche dynamische VIs, die tatsächlich erst dann eingebunden werden, wenn sie im Programmablauf eben genau jetzt aufgerufen werden sollen. Solche VI's werden dann zur Kompilierzeit eben nicht eingebunden. Dann aber ist der Pfad wichtig. Für was man dieser Verfahrten braucht, weiß ich jetzt nicht. Ich hab sowas noch nie gebraucht.

Für DLL's in C++/Delphi gilt ähnliches: Linken zur Programmstartzeit und Linken per Programmbefehl LoadLibrary.


Ich glaube wir warten mal auf RolfK.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2008, 05:40
Beitrag #6

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
Gute Idee. Big Grin Freedive könnte es auch noch genauer wissen. Wink

Gruß Markus

' schrieb:Ich glaube wir warten mal auf RolfK.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.07.2008, 09:42
Beitrag #7

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
' schrieb:Wie in meinem ersten Screenshot zu sehen ist, rufe ich ein VI so auf, indem ich einen Plugin-Namen aus der Datenbank hole und den Pfad für das entsprechende Plugin zusammensetze. Der Aufruf funktioniert in der Entwicklungsumgebung natürlich, weil es diesen Pfad gibt. In meiner EXE gibt es aber diesen "Plugin"-Ordner nicht, aber der Aufruf funktioniert trotzdem.

Meine Frage nun:
Wo hinterlegt LabVIEW die Information zu meinem dynamisch aufgerufenen VI?

Das verstehe ich jetzt auch nicht ganz, den Ordner "Plugin" gibt es schon irgendwo auf der Festplatte, oder?
Das ist ja auch der Sinn eines "Plugin", in einer EXE zusätzliche Funktionen via eines VI's das irgendwo auf der Festplatte liegt, deshalb braucht es ja auch einen Pfad. Dann kommt noch hinzu, ob du in der INI zur EXE noch den Suchpfad drinn hast, sollte eigentlich nicht sein.
Und was dein "currentDirectory.vi" macht, hat wohl auch noch einen Einfluss darauf.

' schrieb:Die zweite Frage (zu meinem 2. Screenshot):
Wie weiß LabVIEW bei so einem Aufruf (diesmal Applikation und EXE), wo sich das VI genau befindet (dies ist übrigens auch ein VI, dass ich bei "Always included" angegeben habe)? Das habe ich so programmiert und es funktioniert auch problemlos, wieso wundert mich aber doch irgendwie. Ich vermute höchstens, dass LabVIEW das aktuelle Projekt durchsucht und da dann das VI findet.

Eine LV-EXE ist eigentlich eine erweiterte LLB. Du kannst deine.exe in deine.llb umbennen und mit LV die LLB öffnen.
Da siehst du nun welche VI in der EXE drinn sind. In dieser LLB gibt es keine Pfade mehr. Dein dynamisches VI ist dort auch drinn, da du das ja mit der Option "included" definiert hast.
Deshalb findet deine.exe das vi auch.

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2008, 13:11
Beitrag #8

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
' schrieb:Heißt das jetzt irgendwo, dass man "Always included" nicht braucht, wenn das VI in einer Disable-Struktur liegt? Huh

nein, wenn du das VI in der Entwicklungsumgebung in das Block-Diagramm ziehst und eine Disable-Struktur drum ziest, dann ist das VI trozdem im Speicher vorhanden. Somit kannst du es auch mit der Primitive "Open VI Reference" unter Angabe des Pfades oder des VI Namens referenzieren und dann per VI Server "manipulieren" z.B. starten ...

auf Allways Included kann man beim Bauen der Exe verzichten, wenn man die dynamischen VIs mit einer "statischen VI Referenz" eingebunden hat. Dann ist dieses dynamische VI schon in der VI Hierarchie vorhanden und wird beim Kompilieren automatisch mit in die EXE eingebunden

   

und wenn man auf so eine statische VI Referenz einen Doppelklick macht dann öffnet sich das entsprechende VI, gerade so als hätte man das als SubVI abgelegt ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2008, 13:18
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
' schrieb:[attachment=40989:foo.png]
Jetzt hab ichs kapiert.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2008, 13:35
Beitrag #10

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Wie funktioniert Einbindung eines dynamischen VIs in eine EXE wirklich?
Ich auch. Wink

Gruß Markus

' schrieb:Jetzt hab ichs kapiert.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  buildete EXE funktioniert nicht, funktioniert dinamic dispatching in EXE überhaupt? robert_bors 9 8.850 04.02.2013 16:01
Letzter Beitrag: robert_bors
  Aufruf von dynamischen VIs aus EXE freakhome 2 5.778 07.01.2011 01:11
Letzter Beitrag: freakhome
  Problem bei dynamischen Laden des reentrant VI in einer EXE pericles 2 5.450 21.07.2010 10:39
Letzter Beitrag: macmarvin

Gehe zu: