' schrieb:Danke Rolf,
das hat wirklich geklappt, ich konnte die DLL mit dem Assistenten jetzt mit allen Funktionen importieren.
Leider hänge ich jetzt schon wieder.
Er hat jetzt für alle Funktionen ein vi erstellt. Soweit so gut.
Die erste Funktion die ich brauche ist "OpenDeviceEther" der ich als Parameter eine Struktur vom Typ "LJIF_OpenParam_Ethernet" mitgeben muss. Diese Struktur enthält jetzt die vier Teile einer IP-Adresse (über die sich die Kamera ensprechen lässt) als CInt.
Das ganze leitet sich wohl von der Microsoft-standard-struktur "IN_ADDR" ab, die auch in der Winsock.h definiert ist.
Aber wie erstelle ich in LabVIEW jetzt eine solche Struktur um sie der Funktion zu übergeben?
Leider habe ich nach dem Importieren eben auch einen Fehlerreport erhalten der genau von dieser Funktion spricht.
Ich hänge ihn mal an.
Edit:
Also ich habe jetzt mal ein wenig "rumprobiert" ^^
Laut einem Tutorial zum einbinden von DLL´s (habe ich hier im Forum irgendwo gefunden) kann man für Strukturen bzw Cluster einfach Arrays verwenden. Nach dem importieren der DLL erstellt er ja für den Parameter "openParam" einen leeren cluster. Den habe ich einfach mal gelöscht und übergebe für openparam jetzt ein umgewandeltes Array.
Er bringt dabei auch keine Fehlermeldung. Aber wenn ich jetzt auf Ausführen klicke gibt die Funktion mir als Hexadezimalzahl 2000 zurück. Was laut Helpfile heisst "Failed to open device".
Irgendwie bin ich auf dem Holzweg, oder?
Array = Cluster ist meistens nicht korrekt. Jedenfalls nicht ohne sehr viel Kenntnis darüber wie die beiden Dinge durch einen C Compiler im Speicher angeordnet werden.
Also die von Dir angesprochene Funktion möchte gerne einen Pointer auf LJIF_OPENPARAM_ETHERNET. Das wiederum ist eine Struktur die die IN_ADDR Struktur enthält. Und IN_ADDR ist eine Union die entweder einen uInt32, zwei uInt16 oder vier uInt8 enthält. Für unsere Zwecke ist die uInt32 Variante am interessantesten. Eigentlich musst Du diesen Parameter nur als usigned 32-bit Integer konfigurieren der als Pointer to Value übergeben wird.
Dann kannst Du direkt den uInt32 den Du von der String to IP Funktion von der TCP Palette bekommst hiermit verbinden. Sollte so direkt gehen. Wenn nicht könnte die Byteorder verkehrt sein und dann müsstest Du noch eine Swap Bytes und Swap Words Funktion zwischen String To IP und diesem Eingang einfügen.
Rolf Kalbermatter