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!
Hallo,
bin noch ein ziemlicher Neuling in LabVIEW und soll eine Treiber-DLL einbinden. Für die meisten Strukturdatentypen weiß ich wie man Wrapperfunktionen schreibt nur bei den Datentypen "HANDLE" und "PVOID" habe ich keine Ahnung, wie ich da dran komme. Wer hat so etwas schon einmal gemacht?
Ich habe gerade dasselbe Problem, dass ich eine externe Funktion aufrufen will und dieser einen Parameter vom Typ HANDLE übergeben muss. Ein Bild mit der Beschreibung von der Funktion hab ich mal angehängt. Bei dem Gerät, das ich über die dll ansprechen will, handelt es sich um ein seriell-USB-Wandler von Silabs.
Weiß hier villeicht jemand Bescheid, wie ich so etwas mache? Geht das überhaupt? Oder mss ich dazu vielleicht noch etwas mehr vom Ersteller der dll erfahren?
Also ich hab sovile herausgefunden, dass ein HANDLE eine Referenz auf irgendetwas in Windows ist, unter der ich dann etwas ansrpechen kann. In diesem Fall muss ich dann den weiteren Funktionen der dll (z.B. lesen, schreiben, schließen usw.) dieses HANDLE übergeben. Aber wie gesagt, ich hab leider keine Ahnung wie ich das machen kann. Hab auch schon beim Aufruf der Funktion für die Parameter alle möglichen Datentypen ausprobiert. Manchmal stürzt LabVIEW dann auch ab.
Vielleicht weiß ja hier jemand darüber Bescheid.
Gruß
Christian
04.04.2007, 11:18 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2007 11:21 von VDB.)
Ich habe gerade dasselbe Problem, dass ich eine externe Funktion aufrufen will und dieser einen Parameter vom Typ HANDLE übergeben muss. Ein Bild mit der Beschreibung von der Funktion hab ich mal angehängt. Bei dem Gerät, das ich über die dll ansprechen will, handelt es sich um ein seriell-USB-Wandler von Silabs.
Weiß hier villeicht jemand Bescheid, wie ich so etwas mache? Geht das überhaupt? Oder mss ich dazu vielleicht noch etwas mehr vom Ersteller der dll erfahren?
Also ich hab sovile herausgefunden, dass ein HANDLE eine Referenz auf irgendetwas in Windows ist, unter der ich dann etwas ansrpechen kann. In diesem Fall muss ich dann den weiteren Funktionen der dll (z.B. lesen, schreiben, schließen usw.) dieses HANDLE übergeben. Aber wie gesagt, ich hab leider keine Ahnung wie ich das machen kann. Hab auch schon beim Aufruf der Funktion für die Parameter alle möglichen Datentypen ausprobiert. Manchmal stürzt LabVIEW dann auch ab.
Vielleicht weiß ja hier jemand darüber Bescheid.
Gruß
Christian
Ein Handle ist ein U32 in LabVIEW (Numeric, Unsigned 32-bit Integer, Pass Pointer To Value in deinem Fall)
Und nicht vergessen Speicher zu deklarieren!
Gemäß dem ProtoTyp und der Beschreibung desselben ist "HANDLE *Handle" ein Ausgabeparameter. Du musst im DLL-Knoten als zweiten Parameter also einen "Zeiger auf Wert" vom Typ U32 angeben. An den DLL-Knoten schließt du dann eine U32-Variable an. Diese enthält dann den Handle, den du dann auf die anderen DLL-Funktionen wie Schreiben und Lesen geben musst.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
04.04.2007, 14:18 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2007 15:28 von Chris82.)
Vielen Dank für die Antworten. Das Lesen hab ich zwar noch nicht hinbekommen, aber das mit dem HANDLE scheint zu funktionieren und LabVIEW stürzt auch nicht mehr ab.
@VDB
Was meinst du mit Speicher deklarieren? Und wie kann ich das machen?
Und hat hier vielleicht jemand schon mal was von dem Datentyp OVERLAPPED gehört? Oder gibt es bei LabVIEW wie in C den NULL-Zeiger?
' schrieb:Und hat hier vielleicht jemand schon mal was von dem Datentyp OVERLAPPED gehört?
Als Datentyp sagt mir das gar nichts. Im Win32 API ist das eine Bezeichnung für eine asynchrone Betriebsart einiger Funktionen (z.B. ReadFile, WriteFile). Dann wird die Funktion mit einem extra Pointer mit spezifischen Information aufgerufen und kehrt danach direkt zum Aufrufer zurück, noch bevor die gewünschten Daten geschrieben oder gelesen wurden. Mit speziellen Mechanismen die Informationen aus dem Pointer verwenden, kann der Aufrufer danach feststellen, wann die Funktion ihre Arbeit abgeschlossen hat.