LabVIEWForum.de
alle funktionen aus C++ dll ausgeben lassen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: alle funktionen aus C++ dll ausgeben lassen (/Thread-alle-funktionen-aus-C-dll-ausgeben-lassen)



alle funktionen aus C++ dll ausgeben lassen - bautz0815 - 10.09.2012 11:39

Hallo LV-Gemeinde,

wir haben in der Firma eine dll Bibliothek die in C++ geschrieben wurde und verschiedene Funktionen zur Verfügung stellt. Ich habe ein Tool geschrieben mit der ich die Funktionen der dll-Bibliothek testen kann. Im Laufe der Zeit kommen neue Funktionen dazu. Es wurde jetzt der Wunsch geäußert, dass nur die enthaltenen Funktionen auf dem FP aktiv sind. Die restlichen Funktionen die in der geladenen dll nicht vorhanden sind sollen Deaktiviert und ausgegraut sein.

Soweit zur Vorgeschichte des Projektes und nun zu meinen Fragen.

Ist es möglich alle Funktionen aus der dll auszulesen und in einem Array zu speichern?
Ich habe jetzt einen Versuch gestartet die Funktionsnamen mit einer INI zu laden (für jede dll-Version eine Abschnitt) und in ein Array abgelegt, funktioniert auch ist jedoch ein Wahnsinns Aufwand die einzelnen Unterschiede der dll-Versionen zu filtern und in die INI einzutragen (ca.120Funktionen).

Und noch eine zweite Frage.
Wie kann ich auf dem FP die entsprechenden Elemente Deaktivieren. Diese sind in 3-Registerkartenreiter mit Unterregisterkarten abgelegt. Ich müsste jetzt die einzelnen Arrayelemente mit den FP-Elementen Vergleichen und je nachdem Aktiv oder Inaktiv schalten.
Gibt es dafür eine Möglichkeit diese Elemente anzusprechen oder muss ich für jedes einzeln eine Referenz bilden um dann den Eigenschaftsknoten deaktiviert wählen.
Da leidet auch die Übersicht im BP bei über 100 Funktionen und wenn eine neue dazukommt muss man aufpassen, dass diese auch überall eingetragen ist.

Ich danke allen schon mal im Voraus.
bautz0815


RE: alle funktionen aus C++ dll ausgeben lassen - rolfk - 10.09.2012 18:55

(10.09.2012 11:39 )bautz0815 schrieb:  Hallo LV-Gemeinde,

wir haben in der Firma eine dll Bibliothek die in C++ geschrieben wurde und verschiedene Funktionen zur Verfügung stellt. Ich habe ein Tool geschrieben mit der ich die Funktionen der dll-Bibliothek testen kann. Im Laufe der Zeit kommen neue Funktionen dazu. Es wurde jetzt der Wunsch geäußert, dass nur die enthaltenen Funktionen auf dem FP aktiv sind. Die restlichen Funktionen die in der geladenen dll nicht vorhanden sind sollen Deaktiviert und ausgegraut sein.

Soweit zur Vorgeschichte des Projektes und nun zu meinen Fragen.

Ist es möglich alle Funktionen aus der dll auszulesen und in einem Array zu speichern?
Ich habe jetzt einen Versuch gestartet die Funktionsnamen mit einer INI zu laden (für jede dll-Version eine Abschnitt) und in ein Array abgelegt, funktioniert auch ist jedoch ein Wahnsinns Aufwand die einzelnen Unterschiede der dll-Versionen zu filtern und in die INI einzutragen (ca.120Funktionen).

Und noch eine zweite Frage.
Wie kann ich auf dem FP die entsprechenden Elemente Deaktivieren. Diese sind in 3-Registerkartenreiter mit Unterregisterkarten abgelegt. Ich müsste jetzt die einzelnen Arrayelemente mit den FP-Elementen Vergleichen und je nachdem Aktiv oder Inaktiv schalten.
Gibt es dafür eine Möglichkeit diese Elemente anzusprechen oder muss ich für jedes einzeln eine Referenz bilden um dann den Eigenschaftsknoten deaktiviert wählen.
Da leidet auch die Übersicht im BP bei über 100 Funktionen und wenn eine neue dazukommt muss man aufpassen, dass diese auch überall eingetragen ist.

Nun angehängtes VI gibt Dir alle Exports zu einer DLL. Caveats: Kein C source code, sorry and only für 32 Bit Windows. Ich hatte noch keine Zeit eine 64 Bit Version zu kompilieren und sehe dafür auch keine Notwendigkeit auf kurzen Termin.

Zum deactivieren von Controls, Du solltest wohl den entsprechenden Code parametrisieren und eventuel in Stacked Sequenzen aufteilen. Dies ist eine der Ausnamen wo ich Stacked Sequenzen als zulässig erachte.


RE: alle funktionen aus C++ dll ausgeben lassen - bautz0815 - 11.09.2012 11:09

Hallo Rolf,

danke für die angebotene Lösung, das ist genau das was ich gesucht habe. Das Array kann ich mir noch zurechtbasteln.

Mit dem controls-Problem, verstehe ich das richtig, ich soll zuerst in einer gestapelten Struktur prüfen ob die die entsprechende Funktion vorhanden ist und den button auf enable setzen?
Das ist einläuchtend, nur wenn die Funktion nicht vorhanden ist startet das VI nicht. Es meldet "Der Funktionsname konnte in der Bibliothek nicht gefunden werden. Mit einem Rechtsklick auf den Knoten "Aufruf externer Bibliotheken" und Auswahl von "Konfigurieren" können Sie den richtigen Funktionsnamen angeben."
Wie kann ich diesen Fehler abfangen?

Das Haupt VI läuft mit einer Ereignisstruktur in der dann die einzelnen Funktionen mit einem Polymorphen SubVI eigefügt sind. Reagierend auf das Ereigniss Wertänderung Controls FALSE auf TRUE (Taste getrückt).


RE: alle funktionen aus C++ dll ausgeben lassen - rolfk - 11.09.2012 12:17

(11.09.2012 11:09 )bautz0815 schrieb:  Hallo Rolf,

danke für die angebotene Lösung, das ist genau das was ich gesucht habe. Das Array kann ich mir noch zurechtbasteln.

Mit dem controls-Problem, verstehe ich das richtig, ich soll zuerst in einer gestapelten Struktur prüfen ob die die entsprechende Funktion vorhanden ist und den button auf enable setzen?
Das ist einläuchtend, nur wenn die Funktion nicht vorhanden ist startet das VI nicht. Es meldet "Der Funktionsname konnte in der Bibliothek nicht gefunden werden. Mit einem Rechtsklick auf den Knoten "Aufruf externer Bibliotheken" und Auswahl von "Konfigurieren" können Sie den richtigen Funktionsnamen angeben."
Wie kann ich diesen Fehler abfangen?

Das Haupt VI läuft mit einer Ereignisstruktur in der dann die einzelnen Funktionen mit einem Polymorphen SubVI eigefügt sind. Reagierend auf das Ereigniss Wertänderung Controls FALSE auf TRUE (Taste getrückt).

Dazu gibt es zwei Lösungsansätze, da Performance bei einer benützergesteuerten Interaktion sicher kein Punkt sein wird. Entweder rufst Du die VIs, die nicht vorhandene DLL Funktionen ansprechen können, dynamisch mittels Call By Reference auf; oder Du verwendest die Option in der Call Library Node um den Path zur DLL auf dem Diagram anzugeben. In beiden Fällen wird die DLL Referenz erst beim Aufrufen aufgelöst und damit sollte das Problem gelöst sein, schliesslich hast Du ja die Funktion die diesen Aufruf started (hoffentlich) korrekt disabled.


RE: alle funktionen aus C++ dll ausgeben lassen - bautz0815 - 18.09.2012 08:19

Hallo Rolf,

ich danke Dir für deine Hilfe, es funktioniert genau so wie ich es mir vorgestellt habe.