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 

Datenrückmeldung von DLL über Callback



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!

20.10.2007, 10:22 (Dieser Beitrag wurde zuletzt bearbeitet: 20.10.2007 10:25 von Kali.)
Beitrag #1

Kali Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Aug 2006

8.2.1
2006
kA


Deutschland
Datenrückmeldung von DLL über Callback
Hallo LabVIEW-Forum,

ich will eine dll in LV einbinden, welche die Verbindung zwischen einem Servocontroller und meiner LV Applikation herstellt.
Das Problem an der Sache ist das hier mit asynchroner Kommunikation gearbeitet wird. Die bedeutet dass die Antwort vom Servocontroller über eine Callbackfunktion kommt.

Hier die dll Funktion:

SetCallback(P_Callback)

P_Callback ist ein Zeiger auf eine Funktion CommandReply(cmd:TCommand)

TCommand ist eine Struktur mit folgendem Aufbau:
ID int(32)
Commad int(32)
Value int(32)
ByteArr byte[16]

Kann mir jemand einen Tip geben wie ich diesen Funktionspointer übergebe, bzw was ich mir unter LV als Funktion vorstellen kann ?
Wie kann ich außerdem mitbekommen wann dieses Callback auftritt, muss ich pollen oder kann ich das auch über einen Event abfangen?

Schon im Voraus besten Dank für jede Information

Gruß Kali
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.10.2007, 15:32
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenrückmeldung von DLL über Callback
Callbacks, wie du und ich sie gern hätten, gibt es nicht. Hast du dieses Tutorial mal überflogen? Ich glaub ich hab da was über Callbacks hineingeschreiben. Callsbacks würden schon gehen, aber nur so, wie LV das will.

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
20.10.2007, 17:07
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenrückmeldung von DLL über Callback
Eins hab ich vergessen: Wrapper-DLL - das geht immer.

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
22.10.2007, 07:34 (Dieser Beitrag wurde zuletzt bearbeitet: 22.10.2007 07:37 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Datenrückmeldung von DLL über Callback
' schrieb:Kann mir jemand einen Tip geben wie ich diesen Funktionspointer übergebe, bzw was ich mir unter LV als Funktion vorstellen kann ?
Wie kann ich außerdem mitbekommen wann dieses Callback auftritt, muss ich pollen oder kann ich das auch über einen Event abfangen?

LabVIEW VIs sind das analoge von Funktionen in anderen Programmiersprachen. Aber LabVIEW VIs werden auf eine ganz andere Weise aufgerufen dann normale Funktionen, unter anderem sind die Parameter und lokalen Variablen nicht auf dem C Stack abgelegt sondern in LabVIEW eigenen Datenstrukturen. Deshalb ist es nicht möglich um ohne extra Aufwand ein LabVIEW VI als Callback Pointer an eine C Funktion zu geben. Was geht dann schon?

1) Eine Wrapper DLL stellt eine kompatible C Callback Funktion zur Verfügung und diese wird bei dem C Module auch registriert. Innerhalb dieser Callback Funktion findet eine Umsetzung des Events statt, etwa indem das Event in eine Queue geschrieben wird die von LabVIEW aus regelmässig gepollt wird, oder Umsetzung in eine LabVIEW Occurrence oder ein LabVIEW User Event. Persönlich habe ich es bis jetzt immer so gemacht, aber das ist nicht unbedingt für jeden weggelegt, da man doch einiges an C Programmierung machen muss und auch manchmal an den Rand dessen kommt was in LabVIEW noch dokumentiert ist.

2) Mit dem Applikation Builder ein VI in eine DLL umsetzen und darauf achten das der exportierte Funktionsprototyp genau übereinstimmt mit dem Interface der Callbackfunktion. Nun kannst Du mit LoadLibrary() diese DLL laden und mit GetProcAddress() einen Funktionspointer zu diesem umfunktionierten VI bekommen, sodass Du einen Pointer an Deine Set_Callback Funktion geben kannst. Auch das ist nicht ganz trivial und ohne einige C Kenntnisse etwa um den Funktionsprototypen wirklich korrekt nach dem Interface der Callbackfunktion zu bekommen, ein absolut sicherer Weg um eine Crashorgie zu starten.

2a) Mit .Net und Reflection kann man obiges Beispiel unter Punkt 2 nochmal enorm verkomplizieren um nun sicher zu sein dass möglichst viel der Windows Infrastruktur mit dieser Aufgabe getestet wird und die Chance auf unmittelbare Crashes zwar etwas verringern, aber um den zweifelhaften Vorteil dass es dann später immer mal wieder unter mysteriösen Umständen crasht.

Ausser obigen Beispielen, die alle nicht für jemanden sind der noch nie in C programmiert hat, ist die einzige Alternative entweder eine Methode ohne Callbacks zu benützen oder jemanden der da eben schon durchblickt damit zu beauftragen. Funktionspointer und damit Callbacks sind nun einmal nicht das Trivialste was es in C Land gibt.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2007, 16:48
Beitrag #5

Kali Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Aug 2006

8.2.1
2006
kA


Deutschland
Datenrückmeldung von DLL über Callback
Vielen Dank für die raschen Antworten,

ich werde dann mein Glück einmal mit einer Wrapper DLL versuchen Wink

Gruß Kali
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
  Callback aus VB-.net-DLL initialisieren IchSelbst 5 10.553 16.06.2016 08:59
Letzter Beitrag: rolfk
  CallBack Funktionen in C für LV spamer84 3 6.716 07.05.2008 19:56
Letzter Beitrag: rolfk

Gehe zu: