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!
21.01.2007, 22:01 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2007 22:08 von IchSelbst.)
' schrieb:Das bringt auch nichts: Am DLL-Knoten ist nämlich niemals ein Bedien/Anzeigeelement angeschlossen - sondern immer ein Draht, also eine ganz spezielle Datenkopie.
Wenn doch der Pointer auf den Draht zeigt - warum dann nicht den Draht als Rückmeldung nehmen. Probierst du Anhang.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
23.01.2007, 10:41 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2007 11:10 von Mr.T.)
Also DANKE!
Es sieht gerade so aus, als ob es funktionieren würde (jetzt weiß ich, dass Daten da sind, als nächstes hole ich sie dann mal ab..)
ichselbst: Vielen Dank. Ich denke das Tut macht immer mehr Sinn.
Achimedes: Vielen Dank! So wars gemeint! Nur dass ich meinte, die Zahl hätte von selbst erscheinen müssen, weil ich ja einen Pointer übergeben habe...
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
@ Mr.T: interessantes Thema ist das hier, könntest du nicht bitte einen Screenshot von deiner DLL + Übergrabeparameter sowie den Funktionstyp reingeben? Ich habe nur LabVIEW 7.20, und die Beispiele die dir hier weitergeholfen haben sind alle für 8.20. Wäre echt super, könnte ein Problem von mir lösen!
ab LV 8.2 gibt es auch Callback in Verbindung mit DLLs.
Ansonsten, statt DLL ein ActiveX Element erzeugen, dann klappt es auch mit Callback-Funktionen.
hoch interessante Diskussion hier, mich interessiert schon länger was LV unter der Haube macht nachdem selbst modernste CPUs keine Flussdiagramme lesen können ;-)
Bisher bin ich eigentlich davon ausgegangen, dass die wires intern als Zeiger genutzt werden (würde sich mE. anbieten), zumal gerade bei messtechnischen Aufgaben ordentliche Datenmengen anfallen, die effizient eigentlich nur referenziert durchgenudelt werden können. Dass die sog. "lokalen Variablen" keine solche im Sinne eines Prozessors sind ist schon klar, wie i2dx schon beschreibt gibt es ausser der Wertänderung zumindest ein GUI (Frontpanel)-Update das allein schon zig Operationen erfordert.
Wenn jemand hintergründiges Material zu Internas von LV kennt, auch die Compilierung wäre interessant, ein Klick auf den Pfeil kann nicht jedesmal so schnell den Linker und Compiler anwerfen um danach das VI auszuführen, immer her damit ... :-)
So long, danke für Infoverweise,
Grüße, Christoph.
' schrieb:weder noch ...
eine lokale Variable ist eigentlich eine Funktion, die entweder den Wert eines Controls verändern oder den Wert eines Controls lesen kann. Beim Schreiben wird automatisch das Frontpanel aktualisiert, damit der geschriebene Wert auch sichtbar ist. Mit Variablen im Sinne von Variablen in C/C++ hat das überhaupt nichts gemeinsam.
Die mit den Variablen in C/C++ vergleichbaren Elemente in LabVIEW sind die Drähte!
Was ichSelbst da nun macht ist: er prüft, ob ein Control auf dem Frontpanel einen bestimmten Wert hat. Wo dieser Wert nun herkommt ist dem Programm völlig wurschd. Das kann durch eine andere lokale Variable gesetzt worden sein, oder der User hat den Wert des Controls verändert, dabei wird immer der gerade aktuelle Wert gelesen. Wenn man nun schnell genug klicken kann, kann man durchaus den Wert einers Controls verändern, ohne dass die lokale Variable alle Änderungen mitbekommt ...
Ansonsten: in LV gibt es intern zwar durchaus Zeiger, aber die sind dem Benutzer nicht zugänglich noch in irgend einer anderen Art und Weise sichtbar. Die Aussage "Ich übergebe einen Pointer auf ein numerisches Bedienelement." ist also Quatsch.
' schrieb:Bisher bin ich eigentlich davon ausgegangen, dass die wires intern als Zeiger genutzt werden (würde sich mE. anbieten), zumal gerade bei messtechnischen Aufgaben ordentliche Datenmengen anfallen, die effizient eigentlich nur referenziert durchgenudelt werden können.
man kann sich die Verwendung von Pointers im LabVIEW Code (=das kompilierte Blockdiagramm) schon in einer gewissen Art und Weise anschauen: Tools --> Profile --> Show Buffer Allocations. Da wo KEIN Buffer allokiert wird (ein Buffer ist quasi eine lokale Kopie der Daten auf dem Stack, der zur Laufzeit angelegt wird) werden Pointer verwendet.