(31.08.2016 13:23 )Stefan1101 schrieb: Hallo zusammen,
nachdem ich bei der Kommunikation mittels VISA (Link) probiert habe, leider kann vollständigen Erfolg hatte, möchte ich nun die Kommunikation mit Hilfe der HIDAPI.DLL realisieren.
Allerdings habe ich das Problem, dass die Funktion hid_open() nicht korrekt ausgeführt wird, ich bekomme immer den Wert "0" zurück. Im angehängten VI habe ich zwei Funktionen realisiert.
Die Erste (hid_enumerate()) dient nur für mich als Bestätigung, dass das Gerät überhaupt angesprochen wird. Ich vermute der Fehler beim Aufruf der zweiten Funktion (hid_open)) liegt im dritten Übergabearameter, der möglicherweise nicht korrekt übergeben wird. Vielleicht liegt es somit an dem Typ *wchar_t?
Hier finde man eine Erläuterung zur der DLL.
Ebenso habe ich probiert die DLL mit LabVIEW zu importieren. Das erstellte VI gibt mir allerdings ebenfalls den Wert "0" zurück.
Über jeden Denkanstoß bin ich dankbar.
Stefan
NULL in C bei einem Stringparameter ist nicht der String "NULL" (man beachte die Anführungszeichen die angeben dass es sich hier um eine String handelt) sondern der NULL Pointer. LabVIEW selber unterstüctzt grundsätzlich keine Pointer aber bei der Call Library Node kann man einen Parameter als Pointersized Integer konfigurieren. Danach kannst Du dort einfach eine Integerkonstante mit dem Wert 0 anbinden. Dadurch dass Du das gleich richtig als Pointersized Integer konfigurierst, bekommst Du später wenn Du allenfalls nach 64 Bit LabVIEW wechselst (Ja, irgendwann mal zwischen LabVIEW 2017 und 2025 wird die 32 Bit Variante auch unter Windows definitive zum Fenster rausgeschmissen, Linux und MacOS X sind schon bei LabVIEW 2016 nur noch 64 Bit!) keine grauen Haare mehr da die VIs auch dann noch korrekt sind.
Das heisst in LabVIEW musst Du diesen Funktionsparemeter entweder als C String Pointer konfigurieren wenn Du dort auch wirklich eine String übergeben willst aber als Pointersized Integer, wenn Du einen NULL Pointer übergeben willst.
Auch die beiden Returnwerte der zwei Funktionen sollten als Pointersized Integer konfiguriert werden statt als 32 Bit Integer. Und man sollte dann natürlich am Ende auch entsprechen hid_free_enumeration() aufrufen für das "Handle" von hid_enumerate() und entsprechen hid_close() für das "Handle" von hid_open(). Ansonsten baust Du ein Speicherleck!