Grundsätzlich hast Du das alles richtig gesehen auch wenn da einige Anmerkungen zu machen sind.
1) LabVIEW kann sehr wohl mit structs umgehen, die entsprechen ganz einfach den LabVIEW Clustern. Aber es gibt dabei verschiedenen Dinge zu berücksichtigen: Erstens müssen die structs "flat" sein, also keine Pointer enthalten und zweitens musst Du auf das "Alignment" der Elemente in einer struct aufpassen. LabVIEW packt die Daten in einem Cluster immer und daher musst Du gegebenenfalls Füllbytes in einen Cluster einfügen um die Datenelemente auf die Alignmentgebegebenheiten der C struct anzupassen.
2) Ein HDEVINFO wie alle anderen Handles in Windows ist eine opaque Dateneinheit. Meist handelt es sich um einen Pointer auf einen Speicherbereich oder einen Arrayindex in eine Windows interne Resourceliste, aber das Format der Daten die dahinter stecken ist normalerweise nicht dokumentieret und kann auch zwischen Windows Versionen sehr stark unterschiedlich sein. Um mit diesem Handle etwas tun zu können musst Du entsprechende Windows APIs benützen.
3) Ein Windows Handle ist im wesentlichen eine 32Bit Zahl (unter Windows 64 Bit in den meisten Fällen eine 64 Bit Zahl) deren Wert für Dich als Anwender normalerweise grundsätzlich unwichtig ist (es gibt Ausnahmen, so gibt es APIs die im Fehlerfall ein NULL Handle oder manchmal auch 0xFFFFFFFF zurückgeben aber alle anderen Werte sind als gültige Handles anzusehen). Du kannst in der LabVIEW Call Library Node so ein Handle Parameter am Besten als 32 Bit unsigned Integer konfigurieren oder in LabVIEW 8.6 eventuel als Pointer sized Integer um für spätere Windows 64 Bit Versionen gewappnet zu sein.
Auf dem
LAVA Forum gibt es jemanden der sich auch schon mit diesen APIs rumgeschlagen hat, mit einem Teilerfolg aber seine C Kenntnisse waren am Ende doch etwas unzureichend um das wirklich vollumfänglich hinzukriegen.
Rolf Kalbermatter