(13.10.2011 10:28 )Mik schrieb: So dann stell ich die header und dll, sowie die Manual im Anhang zur vefügung.
Das Driver Paket kann man aber auch kostenlos, ohne Regestrierung, bei Vector downloaden (2,8 MB)
Vector XLDriverPaket
Habe jetzt eine Mögliche Ursache gefunden. Habe wie geschreiben hier nur die LabVIEW Version 7.0 und einige Werte benötigen
64Bit Werte. LabVIEW 7.0 unterstützt aber nur 32Bit Werte bei den Parametern.
Da ich nicht wirkllich viel Erfahrung mit dll´s und der Einbindung in LabVIEW habe habe ich diesen Punkt
in der header Datei übersehen. Es werden auch nur zwei 64 Bit Werte verwendet (Access Mask und Timestamp).
Also da sind zwei Dinge. Die von Dir erwähnten AccessMasks die 64 bit sind und nicht 32 bit, und auch der xlInterfaceVersion Parameter der gemäss Header unsigned int ist und nicht unsigned short wie in Deinem VI. Das Letzte sollte wohl nicht das Problem sein, das Erste ist aber ziemlich problematisch. Da LabVIEW 7 keine 64 Bit Integer unterstützt kann man das eventuell mit etwas Magic aber doch noch hintricksen.
Für die permissionMask ist's noch relativ einfach da dieser als Referenz übergeben wird. Man macht hier mal einen Cluster, der zwei 32 bit Integers enthält und übergibt den als Parameter. Dazu muss der Parameter auf Adapt to Type gesetzt werden. Für die accessMask wirds etwas trickier. Da dieser by Value übergeben wird, man in LabVIEW aber keine Cluster by Value übergeben kann, muss man eine andere Eigenschaft der Parameterübergabe auf dem Stack kennen. Ein Cluster der by Value übergeben wird, wird effektiv Element für Element auf den Stack geschoben. Also muss man die accessMask in zwei 32 Bit Parameter aufteilen. Man übergibt also effektiv einen 32 bit Integer AccessMaskLo und dann einen anderen AccessMaskHi, und danach den Cluster als Adapt To Type. Das sollte dann schon funktionieren.
Das lässt dann auch gleich erkennen warum es nun falsch geht. Effektiv interpretiert die Funktion den Parameter accessMask nun als Low 32 bit Integer und den Pointer auf permissionMask als High 32 bit Integer der AccessMask. Danach wird die QueueSize als Pointer auf einen 64 bit permissionMask Wert interpretiert, usw. Dass das nicht sofort crasht ist nur ein unglücklicher Zufall.