LabVIEWForum.de - Bytestring aus DLL unvollständig, Binäre Null?

LabVIEWForum.de

Normale Version: Bytestring aus DLL unvollständig, Binäre Null?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebes LV-forum,

ich benötige etwas Hilfe bei der Ansteuerung eines Spektrometers in einem Controller. Die dort befindliche CCD Zeile gilt es auszulesen. Man sendet einen Befehl Get_CCD an die DLL und kann im Anschluss mit einer Abfrage Get_ParameterString einen ByteString erhalten.

Laut Dokumentation lautet die C Funktionsdefinition:
ERR_CODE GetParameterString (DWORD instanceHandle, LPCTSTR paramName, LPTSTR paramValue, DWORD *maxLen)

Man erhält einen 4096 Byte langen String, der in 2048 Datenwerte, welche den 2048 pixeln entsprechen, umgerechnet werden.

Mit dem SubVI, welches ich LV8-kompatibel angehangen hab, kann ich alle Stringparameter, wie Version etc.pp, erfolgreich abfassen. Wenn ich jedoch Spektren als Bytestring erhalten möchte, ist der Bytestring immer unterschiedlich lang, d.h. nicht 4096 sondern er bricht ab. Dieses Verhalten habe ich im angehangenen Video auch dem Entwickler der DLL gesandt. Über die eingebaute Logfunktion der DLL ist ersichtlich, dass vom Controller 4096 Byte empfangen werden. Des Weiteren funktioniert ein C-Programm welches exakt selbe DLL und funktionen nutzt einwandfrei.
Der Entwickler meinte, dass sich vll. LV mit binären Nullen im String schwer tut und meinte den Datentyp als void * anzulegen. Das habe ich probiert, habe aber das problem, dass ich maxLen nicht als Stringlänge für den void parameter zur speicherallokation übergeben kann, weil es ja ein void ist. Auch ein 4096er 8Byte array, als String umgewandelt, in den Void reingeschickt, hat nicht funktioniert.

Meine Frage ist: Kennt jemand ähnliches Verhalten beim Auslesen von ByteStrings? Gibt es eine Lösung mit void alle 4096 Byte zu erhalten ?

Vielen Dank im Voraus

Martin
[attachment=28903]
Lv85_img
[attachment=28904]
Bitte nächstes Mal LabVIEW-Version angeben. Rulez
Außerdem Profil_ergaenzen. Du hast ein VI für LabVIEW 8.5 hochgeladen und in Deinem Profil steht 6.1.

Gruß Markus
When Du in der Call Library Node einen Parameter als C String Pointer konfigurierst Gibt Dir LabVIEW immer nur den Teil zurück bis zum ersten NULL Byte in dem "String". Das ist auch korrect so denn ein C String ist ein NULL terminated Buffer.

Um binäre Buffers in LabVIEW zurückbekommen zu können, musst Du diesen Parameter als Byte Array konfigurieren und den C Array Pointer darauf an die DLL übergeben. Memorytechnisch ist ein C String ganz einfach ein Byte Array.
Referenz-URLs