LabVIEWForum.de
Labview Import / DLL debuggen - 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: Labview Import / DLL debuggen (/Thread-Labview-Import-DLL-debuggen)

Seiten: 1 2 3 4


RE: Labview Import / DLL debuggen - galilio - 26.10.2015 08:13

Hallo,

es ist wie Rolf gesagt hat. Ich bin mit dem Wrapper falsch umgegangen.
Jetzt wollte ich meine wrapper wie hier in dieser Beispiel geschrieben "http://labviewwiki.org/DLL/shared_library" anpassen.
Ich habe dieses Beispiel wiederholt und hier ist das Ergebnis.

Ich verstehe nicht wie soll ich der Struct base initialisieren?

Ich bin so vorgegangen:

1) createbase Vi aufgerufen
2) set_x() VI werte von x_in setzen
3) get_x() VI aufrufen

Die Werte sind immer 0


RE: Labview Import / DLL debuggen - galilio - 28.10.2015 19:48

Ich muss eigentlich nur die Vi miteinander verbinden und die Einstellung der Library anpassen dann klappt alles wunderbar.


danke an alle.
So ist für mich das thema erledigt.
Es war eine schwere Geburt aber es klappt und bin am Ziel.
danke noch mal.


RE: Labview Import / DLL debuggen - rolfk - 29.10.2015 19:08

(28.10.2015 19:48 )galilio schrieb:  Ich muss eigentlich nur die Vi miteinander verbinden und die Einstellung der Library anpassen dann klappt alles wunderbar.


danke an alle.
So ist für mich das thema erledigt.
Es war eine schwere Geburt aber es klappt und bin am Ziel.
danke noch mal.

Ja aber mache doch den object pointer ein "Pointer Sized Integer" bitteschön. 32 Bit Integer funktioniert solange Du nur in LabVIEW 32 Bit arbeitest. Willst Du aber irgendwann mal nach 64 Bit gehen musst Du natürlich Deine DLL für 64 Bit compileren aber auch in allen Libraryknoten den Parameter anpassen. Und das entsprechende Kontrol auf dem Frontpanel sollte ein 64 Bit Integer sein.


RE: Labview Import / DLL debuggen - galilio - 06.11.2015 20:13

Hallo Rolf,


ich habe einen kurzen Frage:
In der DLL Import habe ich eine Funktion geschrieben, die nicht anders macht als der gewrapperte Objekt zu löschen.
Code:
DLLIMPORT void destroy_base(base* LV_ref)
{
    delete LV_ref;
}

nun weiss es nicht genau wann soll ich dieses Funktion bzw. der erstellte destory_base() VI aufrufen.

Da es nähmlich, wenn ich letzte Vi schliesse stürtze das ganze Labview und das muss nicht sein.


Hast du vielleicht eine Idee woran es liegen kann?

Danke


RE: Labview Import / DLL debuggen - rolfk - 06.11.2015 21:49

(06.11.2015 20:13 )galilio schrieb:  Hallo Rolf,


ich habe einen kurzen Frage:
In der DLL Import habe ich eine Funktion geschrieben, die nicht anders macht als der gewrapperte Objekt zu löschen.
Code:
DLLIMPORT void destroy_base(base* LV_ref)
{
    delete LV_ref;
}

nun weiss es nicht genau wann soll ich dieses Funktion bzw. der erstellte destory_base() VI aufrufen.

Da es nähmlich, wenn ich letzte Vi schliesse stürtze das ganze Labview und das muss nicht sein.


Hast du vielleicht eine Idee woran es liegen kann?

Danke

Sorry ich verstehe eigentlich nur BahnBahn

Grundsätzlich solltest Du destroy_base() dann aufrufen wenn Du nichts mehr mit dem base Objekt machen willst.
Aber dann muss der destructor Deines base Objekts auch keine illegalen Dinge machen.


RE: Labview Import / DLL debuggen - galilio - 09.11.2015 19:16

Hallo Rolf,

ich habe einen Statemachine "event basiert" erstellt, wo ich jede State bearbeiten kann.
Für das destory_base habe ich extra einen state erstellt. Einzige Aufgabe was dieses State "destory_base" hat ist das Aufräumen. Also in dieses State wird dieses VI destory_base einfach aufgerufen.

Danach wird das VI mit der Statemachine auch beendet.
Problem ist: Labview stürz immer ab.
Seh bitte Anhang:


RE: Labview Import / DLL debuggen - rolfk - 10.11.2015 21:42

(09.11.2015 19:16 )galilio schrieb:  Hallo Rolf,

ich habe einen Statemachine "event basiert" erstellt, wo ich jede State bearbeiten kann.
Für das destory_base habe ich extra einen state erstellt. Einzige Aufgabe was dieses State "destory_base" hat ist das Aufräumen. Also in dieses State wird dieses VI destory_base einfach aufgerufen.

Danach wird das VI mit der Statemachine auch beendet.
Problem ist: Labview stürz immer ab.
Seh bitte Anhang:

Dein C Code beschreibt irgendwo Speicher den er nicht sollte. Das kann in der destroy_base() Funktion sein oder auch in einer anderen Funktion. Dir bleibt nichts anderes übrig als den C Code komplett zu reviewen und nochmals zu reviewen bis Du den Fehler findest. Du kannst versuchen den Debug Level in allen Call Library Nodes auf Maximum zu setzen. LabVIEW fängt dann alle möglichen Exceptions ab und legt um alle Parameter die an die DLL Funktion übergeben werden extra Speicher an der mit einem bestimmten Pattern gefüllt ist und checkt dann nach Rückkehr von der Funktion ob alles noch in Ordnung ist. Das kann helfen Buffer overruns in Deinem C Code zu fangen. Aber wenn Du in Deinem C Code irgendwo einen ungültigen Pointer verwendest dann kann LabVIEW das meist auch nicht detektieren und dann beginnt die freudige Arbeit des echten Programmierers: C Code debuggen!

Nun weisst Du auch wieder warum Du normal in LabVIEW programmierst und nicht in C!