08.01.2017, 15:13
Servus,
ich habe es irgendwie geschafft, eine leere VI zu erzeugen, die von der ausführenden Labview-Instanz nicht als "VI in memory" erkannt wird ...
Genau genommen habe ich die VI nicht selbst erstellt, die genaue Quelle ist mir unbekannt. Mir ist nur irgendwann aufgefallen, dass diese VI weder im "VI hierarchy" Fenster noch unter den "VIs in memory" (application property node) angezeigt wird, was mir sehr merkwürdig vorkam. Die ursprüngliche VI enthielt keinen Code, der das irgendwie erklären konnte und das Entfernen von Code-Teilen hat nichts am Verhalten geändert. Das ging dann soweit, dass ich das komplette Blockdiagramm und Frontpanel gelöscht und alle "VI properties" auf Default-Werte gesetzt habe und die "blanke" VI-Datei als Kopie gespeichert habe.
Aus diesem "unsichtbaren" Template kann man sich dann ein beliebiges Programm basteln... Es verhält sich eigentlich nicht anders als jede andere VI (man kann es als subVI callen, per Referenz mit Dateipfad zugreifen und natürlich ganz normal ausführen), aber es taucht einfach nicht in der Hierarchie auf (und somit auch keine Child-Objekte). Gibt es irgendwelche flags, womit man die VI vor den "VIs in memory" verstecken kann (und das Hierarchie-Fenster baut ja vermutlich darauf auf) oder habt ihr irgendeine Erklärung dafür?
Hier sind ein paar Screenshots von einem Minimalbeispiel. Es ist ein triviales Programm, das die Uhrzeit anzeigt und es enthält den simple error handler, damit im "VI hierarchy" Fenster Child-Objekte angezeigt werden:
Nur "the invisible vi.vi" ist offen, das Hierarchie-Fenster ist leer.
Hier ist ein Vergleich mit einer "normalen" VI. Die clock.vi hat denselben Code wie die invisible, wurde aber normal über FIle -> New VI erstellt (und nur der Code reinkopiert). Zusätzlich zeigt die "Opened VIs.vi" alle "VIs in memory" mit offenem front panel - sie listet nur sich selbst und die clock.vi, aber nicht die invisible. Ebenso zeigt das Hierarchie-Fenster nur die clock.vi mit den Subroutinen sowie die "Opened VIs.vi", aber nicht die invisible.
Die invisible VI ist ca. 4kB größer als die clock.vi. Im Hexeditor sieht es so aus, als hätten die zusätzlichen 4kB der invisible VI was mit dem Icon Editor zu tun (das Icon wurde bearbeitet), währen die clock.vi ein Standard-Icon hat, das nie bearbeitet wurde. Darüber hinaus gibt es keine offensichtlichen Unterschiede, also können es wohl nur irgendwelche flags sein - hat jemand eine Idee?
Alle 3 VIs sind im Anhang (). Die Tests wurden unter Win 10 x64 und Labview 2016 32bit gemacht. Ich habe auch versucht die invisible VI als vorherige Version zu speichern (), aber sie zeigt dasselbe Verhalten.
ich habe es irgendwie geschafft, eine leere VI zu erzeugen, die von der ausführenden Labview-Instanz nicht als "VI in memory" erkannt wird ...
Genau genommen habe ich die VI nicht selbst erstellt, die genaue Quelle ist mir unbekannt. Mir ist nur irgendwann aufgefallen, dass diese VI weder im "VI hierarchy" Fenster noch unter den "VIs in memory" (application property node) angezeigt wird, was mir sehr merkwürdig vorkam. Die ursprüngliche VI enthielt keinen Code, der das irgendwie erklären konnte und das Entfernen von Code-Teilen hat nichts am Verhalten geändert. Das ging dann soweit, dass ich das komplette Blockdiagramm und Frontpanel gelöscht und alle "VI properties" auf Default-Werte gesetzt habe und die "blanke" VI-Datei als Kopie gespeichert habe.
Aus diesem "unsichtbaren" Template kann man sich dann ein beliebiges Programm basteln... Es verhält sich eigentlich nicht anders als jede andere VI (man kann es als subVI callen, per Referenz mit Dateipfad zugreifen und natürlich ganz normal ausführen), aber es taucht einfach nicht in der Hierarchie auf (und somit auch keine Child-Objekte). Gibt es irgendwelche flags, womit man die VI vor den "VIs in memory" verstecken kann (und das Hierarchie-Fenster baut ja vermutlich darauf auf) oder habt ihr irgendeine Erklärung dafür?
Hier sind ein paar Screenshots von einem Minimalbeispiel. Es ist ein triviales Programm, das die Uhrzeit anzeigt und es enthält den simple error handler, damit im "VI hierarchy" Fenster Child-Objekte angezeigt werden:
Nur "the invisible vi.vi" ist offen, das Hierarchie-Fenster ist leer.
Hier ist ein Vergleich mit einer "normalen" VI. Die clock.vi hat denselben Code wie die invisible, wurde aber normal über FIle -> New VI erstellt (und nur der Code reinkopiert). Zusätzlich zeigt die "Opened VIs.vi" alle "VIs in memory" mit offenem front panel - sie listet nur sich selbst und die clock.vi, aber nicht die invisible. Ebenso zeigt das Hierarchie-Fenster nur die clock.vi mit den Subroutinen sowie die "Opened VIs.vi", aber nicht die invisible.
Die invisible VI ist ca. 4kB größer als die clock.vi. Im Hexeditor sieht es so aus, als hätten die zusätzlichen 4kB der invisible VI was mit dem Icon Editor zu tun (das Icon wurde bearbeitet), währen die clock.vi ein Standard-Icon hat, das nie bearbeitet wurde. Darüber hinaus gibt es keine offensichtlichen Unterschiede, also können es wohl nur irgendwelche flags sein - hat jemand eine Idee?
Alle 3 VIs sind im Anhang (). Die Tests wurden unter Win 10 x64 und Labview 2016 32bit gemacht. Ich habe auch versucht die invisible VI als vorherige Version zu speichern (), aber sie zeigt dasselbe Verhalten.