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 

Übergabe eines Pointers



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!

18.01.2007, 11:17
Beitrag #1

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Übergabe eines Pointers
Hallo!

Anbei mal ein Beispiel VI. Ich habe dem DLL Aufruf (Funktion erwartet u.A. einen Pointer) ein Numerisches Element aus einem Cluster zugewiesen. Die Funktion signalisiert über diesen Pointer, oder besser gesagt den Inhalt der Speicherstelle, einen Zustand.

Das heisst: Ich übergebe einen Pointer auf ein numerisches Bedienelement. Die Funktion sollte mittels des Pointers den Inhalt des Elemetns ändern, z.B. eine 1 hineinschreiben. Wacko

Da alle anderen DLL Aufrufe funktionieren, gehe ich davon aus, dass ich wohl falsch auf dieses Ereignis warte...:Blink

   

Und hier das VI welches die Funktion aufruft:


Sonstige .vi  DAQ_HalfReady.vi (Größe: 17,27 KB / Downloads: 246)


So, ich hoffe Ihr könnt mir da helfen...

Die LLB ist hier im Forum zu finden unter:

http://www.LabVIEWforum.de/index.php?showtopic=4511

Gruß und Dank!

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.01.2007, 12:01
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergabe eines Pointers
Laut diverser LV-Experten sind lokale Variablen alles Kopien. Wenn dem so ist, wird das mit dem Pointer nichts.

Frage:
Ist das Element in der While-Schleife nun eine Kopie mit eigenem Speicherbereich, oder zeigen alle "Variablen-Instanzen" auf ein und den selben Speicherbereich?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2007, 13:45 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2007 13:46 von cb.)
Beitrag #3

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Übergabe eines Pointers
' schrieb:Laut diverser LV-Experten sind lokale Variablen alles Kopien. Wenn dem so ist, wird das mit dem Pointer nichts.

Frage:
Ist das Element in der While-Schleife nun eine Kopie mit eigenem Speicherbereich, oder zeigen alle "Variablen-Instanzen" auf ein und den selben Speicherbereich?

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.

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2007, 14:19
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergabe eines Pointers
' schrieb:Die Aussage "Ich übergebe einen Pointer auf ein numerisches Bedienelement." ist also Quatsch.
Pointer auf z.B. Datenwerte zum Zwecke der externen Manipulation dieses Datenwertes gibt es also nicht - demzufolge kann man sie auch nicht an die DLL übergeben.

Mr.T, warum macht du nicht einfach anstelle des Variablenzugriffs einen DLL-Aufruf zum Lesen des Wertes?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2007, 17:36
Beitrag #5

Achimedes Offline
LVF-Freak
****


Beiträge: 544
Registriert seit: Aug 2005

2011
2001
DE

72461
Deutschland
Übergabe eines Pointers
Huhu,
ich glaube so wolltest du das haben?
Oder?

Sonstige .vi  DAQ_HalfReady.vi (Größe: 18,73 KB / Downloads: 319)

Wer Rechtschreibfehler findet .... darf sie behalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2007, 18:54
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Übergabe eines Pointers
' schrieb:Pointer auf z.B. Datenwerte zum Zwecke der externen Manipulation dieses Datenwertes gibt es also nicht - demzufolge kann man sie auch nicht an die DLL übergeben.

Mr.T, warum macht du nicht einfach anstelle des Variablenzugriffs einen DLL-Aufruf zum Lesen des Wertes?

Wenn du die Call Library Node verwendest und einstellst, dass der Wert aus LabVIEW als Pointer übergeben werden soll, dann wird der Wert per Pointer übergeben. Einen "echten" Pointer kannst du in LV Blockdiagramm nicht erzeugen.

   

Ich frag mich aber, was das nun mit der lokalen Variaben aus dem Bild zu tun hat ?Wacko

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2007, 19:05
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergabe eines Pointers
' schrieb:Ich frag mich aber, was das nun mit der lokalen Variaben aus dem Bild zu tun hat ?
Soviel ich verstanden habe, will er folgendes machen:

In einem bestimmten DLL-Aufruf, z.B. ganz am Anfang des LV-Programmes, übergibt er einen Zeiger auf die Variable DAQ_HalfReady.Haldready (was ja gar nicht geht). Die DLL nun besitzt einen eigenen Prozessor-Thread, der mittels dieses Zeigers auf die Variable DAQ_HalfReady.Haldready schreiben wird. Im LV-Programm würde man dann alleine durch Abfragen dieser Variablen - siehe Bild - einen Status der DLL feststellen können, ohne die DLL selbst danach fragen zu müssen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.01.2007, 07:20
Beitrag #8

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Übergabe eines Pointers
' schrieb:Soviel ich verstanden habe, will er folgendes machen:

In einem bestimmten DLL-Aufruf, z.B. ganz am Anfang des LV-Programmes, übergibt er einen Zeiger auf die Variable DAQ_HalfReady.Haldready (was ja gar nicht geht). Die DLL nun besitzt einen eigenen Prozessor-Thread, der mittels dieses Zeigers auf die Variable DAQ_HalfReady.Haldready schreiben wird. Im LV-Programm würde man dann alleine durch Abfragen dieser Variablen - siehe Bild - einen Status der DLL feststellen können, ohne die DLL selbst danach fragen zu müssen.

ahso ... äh, ja ... das geht natürlich nicht. Wenn, dann muss man die DLL pollen ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2007, 18:11 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2007 18:17 von Mr.T.)
Beitrag #9

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Übergabe eines Pointers
Hallo!

Erholt vom WE und dem Usertreff (wo ich dann doch einige hier aus dem Thema hier vermisst habeWink) kann ich mich nun wieder meiner Frgaestellung widmen (Sorry dafür!). Rolleyes

Es geht mir um folgendes:
Die Funktion HalfReady() soll mittels des übergebenen Pointers signalisieren, dass Daten zum abholen bereit sind. Also würde ich in C einfach den Pointer übergeben, um der Funktion zu ermöglichen, mir irgendwie mitzuteilen, dass die Daten bereit zum abholen sind. Nämlich, in genau dieser übergebenen Speicherstelle (Pointer). Die DLL Funktion HalfReady() sollte den Wert, auf den der Pointer zeigt, verändern und somit mitteilen, dass ich was tun muß, um die Daten zu erhalten. Das sollte die while(HalfReady!=0) - Schleife andeuten.

Da Ihr jetzt schon so fleißig diskutiert habt, merke ich, dass ich das so garnicht realisieren kann. Die Frage bleibt nun: Wie dann?

Die DLL Funktion Teilt mir nunmal über den Inhalt der übergebenen Pontervariablen mit, dass ich was tun muß...Sad
Was meint Ihr dann mit "DLL Pollen"?

Gruß und DANK!

Edit:
Die lokale Variable habe ich eingefügt, da das Bedienelement dazu weiter vorne im Programm verwendet wird - nur Optik. In diesem Bedienelement gibt es das Element "HalfReady", welches durch die DLL also verändert werden hätte sollen. klar, ich kann auch direkt das Bedienelement anschliessen, aber wie ich Euch verstehe, hätte das auch nichts gebracht. Das Zweite Element des Clusters (Bedienelementes) ist der andere Übergabeparameter der HalfReady(Pointer, 2.Parameter), auf welchem eingegeben wird, auf welche "id", also DAQ-Karte sich der DLL-Aufruf bezieht....

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2007, 19:14
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergabe eines Pointers
' schrieb:Die DLL Funktion Teilt mir nunmal über den Inhalt der übergebenen Pontervariablen mit, dass ich was tun muß
Dieses Verfahren (das quasi einem Callback entspricht nur ohne Programm) ist aber nicht verträglich mit LV. Mit anderen Worten: Das geht nicht (zumindest bisher, bis ich den Rest ausprobiert habe).

Zitat:Was meint Ihr dann mit "DLL Pollen"?
Na, pollen halt - zyklisch nachfragen: DLL, hast du was für mich? DLL, hast du was für mich? DLL, hast du was für mich? DLL, hast du was für mich? (usw)

Zitat:klar, ich kann auch direkt das Bedienelement anschliessen, aber wie ich Euch verstehe, hätte das auch nichts gebracht.
Das bringt auch nichts: Am DLL-Knoten ist nämlich niemals ein Bedien/Anzeigeelement angeschlossen - sondern immer ein Draht, also eine ganz spezielle Datenkopie.

Hast du mal die Möglichkeit Callback angedacht?

Fazit:
Bis jetzt steht's schlecht aus.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL mit String Nullpointer Übergabe Hubert R. 5 4.900 25.08.2023 11:43
Letzter Beitrag: rolfk
  Übergabe eines struct arrays an eine DDL und wieder Auslesen SK-AC 4 6.535 12.08.2010 17:01
Letzter Beitrag: rolfk
  Mehrere Cuda DLLs Context-Übergabe grey 2 5.563 17.06.2010 19:50
Letzter Beitrag: rolfk
  LV 7.1, VC++-DLL (VC++2008), string-Übergabe ptillmann 1 4.784 12.03.2010 20:34
Letzter Beitrag: rolfk
  Unhandled exception bei Übergabe eines CArrays abrissbirne 8 8.339 25.04.2008 23:31
Letzter Beitrag: abrissbirne
  Übergabe eines C Array abrissbirne 1 4.635 13.04.2008 22:12
Letzter Beitrag: rolfk

Gehe zu: