Moin,
Ich befasse mich gerade damit eine selbstgeschriebene DLL mit LabVIEW (2013) einzubinden.
Hintergrund des Ganzen ist, dass ich mir die einfache GUI Programmierung von LabVIEW zunutzen machen möchte um einige Funktionen zu testen, die ich anschließend jedoch in C bereitstelle. C++/Qt kommen aktuell aber nicht in Frage, da müsste ich mich erste einarbeiten.
Bei einfachen Funktionen funktioniert der Aufruf aus der DLL auch einwandfrei.
Code:
uint8_t add(uint8_t a, uint8_t b);
void mult(uint8_t a, uint8_t b, uint16_t *ret);
Problematisch wird es, wenn Arrays hinzukommen.
Was mein Code macht, ist einen Array gemäß einiger Parameter zu füllen:
Code:
void composeMsgTest(uint32_t a,
uint32_t b,
uint32_t c,
float d,
uint8_t *retData,
uint16_t *retLen);
Hier ist retData das Array (oder viel mehr der Pointer auf dessen erstes Element) und retLen dessen Länge.
Sobald ich diesen Code dann in eine DLL compiliere kommt es in LabVIEW zu Problemen, genauer dem Fehler 1097. Binde ich das
Zum Testen habe ich mir dann ein kleines C Programm geschrieben. Dieses läuft einwandfrei durch und gibt mir die erwarteten Daten aus.
Nach einigem rumprobieren habe ich nun festgestellt, dass ich mich bei den Arrays in LabVIEW zu doof anstelle.
In dem Beispielen habe ich dann die "DW Test Copy.vi" gefunden. In der entsprechenden Header Datei der DLL wird der Array als
übergeben. Ändere ich meinen Code dahingehend tritt weiterhin der selbe Fehler auf.
Beim Aufruf der externen Bib stelle ich das entsprechende Parameter auf den Typ "Array", den Datentyp "uint8_t" und das Format auf "Array Datenzeiger". Der angezeigt Funtionsprototyp entspricht dabei dem, was in meiner Header Datei steht.
Anbei gibt es einmal die DLL und die Test Vi.
Ich wäre für Anregungen und Tipps im Umgang mit Arrays beim Aufruf von externen Bibs sehr dankbar.
Gruß
Flemmy