LabVIEWForum.de
Datentyp HANDLE, PVOID - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Datentyp HANDLE, PVOID (/Thread-Datentyp-HANDLE-PVOID)



Datentyp HANDLE, PVOID - weschi - 28.03.2006 09:37

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?

Danke schon mal für die Antworten!


Datentyp HANDLE, PVOID - Chris82 - 04.04.2007 11:10

Hallo,

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


Datentyp HANDLE, PVOID - VDB - 04.04.2007 11:18

' schrieb:Hallo,

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!


Datentyp HANDLE, PVOID - IchSelbst - 04.04.2007 12:14

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.


Datentyp HANDLE, PVOID - Chris82 - 04.04.2007 14:18

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?


Datentyp HANDLE, PVOID - IchSelbst - 04.04.2007 16:51

' schrieb:Und hat hier vielleicht jemand schon mal was von dem Datentyp OVERLAPPED gehört?
Hier ich! Lol
Ich vermute aber mal, dass das nicht geht. Auch wenn ich gar nicht weis, wo du plötzlich diesen Typ her hast und was du damit machen willst.

Zitat:Oder gibt es bei LabVIEW wie in C den NULL-Zeiger?
Im Prinzip ja. NULL: Typ U32, Wert 0


Datentyp HANDLE, PVOID - Chris82 - 05.04.2007 12:20

Jaaaaaa, ich habs hinbekommen.

FÜr alle, die dasselbe oder vielleicht etwas ähnliches machen wollen, hier ein hilfreicher Link:

http://www.cygnal.org/ubb/Forum9/HTML/000911.html


Datentyp HANDLE, PVOID - rolfk - 12.06.2007 14:14

' 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.

Rolf Kalbermatter