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 

LabVIEW & Dll ->Absturz?!?



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!

29.08.2006, 14:17
Beitrag #1

moojoo Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Aug 2006

5.1
2006
kA


Deutschland
LabVIEW & Dll ->Absturz?!?
Hallo!
Ich "nerve" dieses Forum mal wieder mit einem Post zu einem Dll ProblemSmile.
Meine selbstgeschriebene Dll-Funktion(Code siehe unten) wird in LabVIEW aufgerufen. Die Funktion soll einfach nur die Daten des Array-Handles in ein anderes, neu dimensioniertes Handle überschreiben, und dann in ein x-y-diagramm ausgeben. Nun stürzt LabVIEW immer dann ab, wenn ich etwas mit der Größe des Ausgangsarray herumspiele. sprich, erst läuft alles super, wenn ich ein Array mit 4 Elementen benutze, aber dann kackt das Prog ab, wenn ich im laufenden Betrieb den Array in der Oberfläche um beispielsweise eins erhöhe (also sprich, in ein "inaktives" eingabefeld des Array einen neuen Wert reinschreib, und damit dem Array ein neues element hinzufüg.) Das komische ist, dass der Fehler willkürlich zu sein scheint, also ich kann nicht sagen, bei welcher Konstellation von Werten und Größen LabVIEW abstürzt (das Abstürzen ist dann das üblicherweise von Windows kommende "diese Anwendung wird geschlossen" blabla).
Nun weiss ich nicht, woran diese Instabilität liegt - an meinem Code(obwohl der ja sehr einfach gehalten ist)? Ich hänge zum Code auch noch die VI-Datei mit der erstellten dll an, damit man mein beschriebenes Umfeld hat (wahrscheinlich müsst ihr dann nach dem laden noch den dll-verweis aktualisieren)
Wäre toll, wenn ihr mir helfen könntet, und schon mal danke im VorrausSmile
Gruß Johannes
PS: Ich benutze noch ein schon etwas angegrautes LabVIEW 5.1, hoffe doch ma, dass die Abstürze nich daran liegen...
Code:
[code]#include "stdafx.h"
#include "dlltest.h"
#include "maxdiff.h"
#include "extcode.h"
#include "diffcollection.h"

#pragma comment (lib, "LabVIEW.lib")

//#include <iostream>
using namespace std;

typedef struct {


Angehängte Datei(en)
Sonstige .zip  dlltest.zip (Größe: 12,53 KB / Downloads: 188)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2006, 14:36
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
LabVIEW & Dll ->Absturz?!?
Bei Speicherzugriffproblemen in LV bei Benutzung von DLLs immer Initialize Array benutzen und auf keinen Fall Array Konstanten.

Bei Init Array kannst du die grösse vorgeben, die muss aber mit der Grösse des Datenarray übereinstimmen.

Gruss

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2006, 16:35 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2006 16:38 von moojoo.)
Beitrag #3

moojoo Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Aug 2006

5.1
2006
kA


Deutschland
LabVIEW & Dll ->Absturz?!?
' schrieb:Bei Speicherzugriffproblemen in LV bei Benutzung von DLLs immer Initialize Array benutzen und auf keinen Fall Array Konstanten.

Bei Init Array kannst du die grösse vorgeben, die muss aber mit der Grösse des Datenarray übereinstimmen.

Gruss

Erstmal danke für die schnelle AntwortSmile
Meinst du, ich soll das LabVIEW-Element Initialize Array benutzen (also bei der graphischen Programmierung) oder im Sourcecode einen anderen Befehl als das Resize verwenden? Ich hab mal ersteres versucht (Aufbau, siehe Bild), da stürzt das Prog jetzt JEDESMAL ab, glaub, ich hab da was falsch gemacht...
Was meinst du genau mit "Größe des Datenarray"? Meinst du die Anzahl der Elemente (die ich im übringen nicht weiss), oder meinst du die Größe in Bits eines einzelnen Elementes des Arrays?
Gruß


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2006, 17:09
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
LabVIEW & Dll ->Absturz?!?
Ersetze deinen Array-Control mit Init-Array(genauso, wie die unteren zwei). Ersetze die Zahl 10 durch eine 3.
Wenn du dann irgendwelche Werte an DLL übergeben willst, benutze "Replace Array Subset dazu".

Melde dich, wenn du es ausprobiert hast.

Gruss

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2006, 18:19
Beitrag #5

moojoo Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Aug 2006

5.1
2006
kA


Deutschland
LabVIEW & Dll ->Absturz?!?
' schrieb:Ersetze deinen Array-Control mit Init-Array(genauso, wie die unteren zwei). Ersetze die Zahl 10 durch eine 3.
Wenn du dann irgendwelche Werte an DLL übergeben willst, benutze "Replace Array Subset dazu".

Melde dich, wenn du es ausprobiert hast.

Gruss

Hab versucht deine Tipps zu realisieren. Hoffe, ich habs so gemacht, wie du meintest (siehe Bild). Warum sollte ich auf drei umstellen(naja im Endeffekt ist es ja auch egal, da das Handle ja eh von der Größe her angepasst wird)?
Dank deiner Hinweise scheint es jetzt zumindest bei einzelausführung stabil zu laufen. Nur wenn ich auf Wiederholtes Ausführen klicke und dann sowohl Werte als auch die Größe verändere, stürzt er ab (siehe zweites Bild). Jetz frag ich mich, ob das an der wiederholten Ausfühung liegt, oder woran sonst? Ich mein, der geschriebene Code scheint ja richtig zu sein!?! Im Endeffekt wollte ich eigenlich nur mal testen, wie die Prozedur dann im wirklichen "Leben" so klarkommt, wenn sie oft hintereinander aufgerufen wird. Hm, das muss scheinbar dann die Praxis zeigen.


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2006, 18:52
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
LabVIEW & Dll ->Absturz?!?
Dein "data" ist vom Typ "TD1Hdl" und dieser Typ besteht aus einer Int-Zahl und einem Array aus 2 Int-Zahlen, also 3 Integers.

Die Zeile
typedef TD1 **TD1Hdl;
verstehe ich nicht so ganz, ist aber egal.

Wenn du aber an DLL ein Array aus vier Ints übergibst, weiss die DLL nicht wohin mit der vierten Zahl und gibt eine Fehlermeldung aus.

Oder ich verstehe dein Prog ganz falsch.

Die Grösse (in Bits) jedes einzelnen Argumentes in der Eintrittsfunktion soll mit den an die DLL zu übergebenden Werten exakt übereinstimmen.

Und schaue mal in den Einstellungen ob die DLL reentrant aufgerufen wird.

Die Doku "Using external Code in LV" hast du bestimmt schon gelesen, nehme ich mal an.

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.08.2006, 19:05
Beitrag #7

moojoo Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Aug 2006

5.1
2006
kA


Deutschland
LabVIEW & Dll ->Absturz?!?
' schrieb:Dein "data" ist vom Typ "TD1Hdl" und dieser Typ besteht aus einer Int-Zahl und einem Array aus 2 Int-Zahlen, also 3 Integers.
hm eigentlich besteht es aus mehr, da Numeric ja ein Array von vorher unbekannter Größe ist. D.h. ich weiss zwar das er eindimensional ist, aber wie viele Elemente diese eine dimension hat, sagt das ja noch nicht, is aber egal
Zitat:Die Zeile
typedef TD1 **TD1Hdl;
verstehe ich nicht so ganz, ist aber egal.
Das wurde mir von LV so generiert, mittels eines CINs, wo ich mal meine Ein - und Ausgänge drangepappt hab. Das ist die einzige Möglichkeit, um ein Arrayhandle zu übergeben und den Array dann dynamisch zur Laufzeit mit hilfe einer LV-Funktion zu resizen.

Zitat:Wenn du aber an DLL ein Array aus vier Ints übergibst, weiss die DLL nicht wohin mit der vierten Zahl und gibt eine Fehlermeldung aus.

Oder ich verstehe dein Prog ganz falsch.

Die Grösse (in Bits) jedes einzelnen Argumentes in der Eintrittsfunktion soll mit den an die DLL zu übergebenden Werten exakt übereinstimmen.
Also die Stuktur dient der Datenübergabe. In dim steht die Anzahl der Elemente von Numeric. Und darin stehen dann die eigentlichen Daten. Und dieses Beispielprog kopiert praktisch aus den gegebenen Data nur rüber in den y-ArraySmile

Zitat:Und schaue mal in den Einstellungen ob die DLL reentrant aufgerufen wird.
Hatte ich eingestellt, aber damit is er mir immer abgeschmiert mit ner Fehlermeldung in irgendeinenr Thread.h, also hab ichs wieder auf das andere UIThread bla eingestellt

Zitat:Die Doku "Using external Code in LV" hast du bestimmt schon gelesen, nehme ich mal an.
Hab ich. Hab so ziemlich alles gelesen:)aber irgendwie nur wenig passendes gefunden (nochdazu kein BeispiVI für LV5.1, sind alle für höhere Versionen, mistSad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2006, 08:10
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
LabVIEW & Dll ->Absturz?!?
<div align="left">Hallo,

wenn ich richtig verstehe, hast du deine externe DLL selbst geschrieben. Ändere doch den Funktionsaufruf nach Möglichkeit so ab, dass du nicht die "structure" als Parameter aus LabVIEW heraus übergeben musst.
Das ist prinzipiell (auch in LV8) kompliziert und gefährlich. Mit der Übergabe von (nur) Arrays und Integer-Variablen müsste es etwas einfacher werden.

MfG, Jens</div>

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2006, 12:57
Beitrag #9

moojoo Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Aug 2006

5.1
2006
kA


Deutschland
LabVIEW & Dll ->Absturz?!?
' schrieb:<div align="left">Hallo,

wenn ich richtig verstehe, hast du deine externe DLL selbst geschrieben. Ändere doch den Funktionsaufruf nach Möglichkeit so ab, dass du nicht die "structure" als Parameter aus LabVIEW heraus übergeben musst.
Das ist prinzipiell (auch in LV8) kompliziert und gefährlich. Mit der Übergabe von (nur) Arrays und Integer-Variablen müsste es etwas einfacher werden.

MfG, Jens</div>

Die Übergabe der Struktur hat den Vorteil, dass man die eigentlichen Daten gebündelt hat mit der Größe des Datenarrays, und, da man ein Handle übergibt (also ein Pointer auf Pointer) kann man die Daten gleich verändern, und das Handle in der Größe anpassen. Wenn man nur einen Array übergibt, so wird nur der Pointer auf das erste Element übergeben, man erhält also keine Aussage über die Anzahl der Elemente des Arrays. Zweiter Nachteil ist, dass man den Array nicht von der Größe anpassen kann. Man müsste die Größe schon vorher in LabVIEW einstellen, das geht für mich aber nicht. Gut, in diesem einfachen Beispiel, das ich hier gepostet hab, mag das gehen, aber eigentlich brauche ich die Möglichkeit, die Größe des Arrays zur Laufzeit festzulegen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2006, 13:37
Beitrag #10

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
LabVIEW & Dll ->Absturz?!?
' schrieb:aber eigentlich brauche ich die Möglichkeit, die Größe des Arrays zur Laufzeit festzulegen.

1) Genau das sollte man vermeiden, weil LabVIEW diesbezüglich so sensibel ist.
2) LV hat einen Vorteil aber auch Nachteil, dass man sich beim Programmieren nicht um den Speicher kümmern muss, man kann aber auch keine Speicheroperationen durchführen.

Gruss

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Absturz des Rechners, wenn die Exe läuft. Svenni 3 4.682 20.06.2006 15:43
Letzter Beitrag: Dennis.Moser

Gehe zu: