LabVIEWForum.de - String Liste aus DLL in LV und zurück

LabVIEWForum.de

Normale Version: String Liste aus DLL in LV und zurück
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe folgendes Problem:

Ich bekomme von meiner DB eine Stringliste übergeben und muss nun eine DLL basteln, worüber LV die Liste einlesen kann und auch wieder eine Liste zurückgeben kann. Wie übergeb ich nun die Liste von der DLL zu Labview und wie bekomm ich sie wieder zurück? (DLL ist in C geschrieben)
(08.11.2011 17:26 )MrIzu schrieb: [ -> ]Hallo,

ich habe folgendes Problem:

Ich bekomme von meiner DB eine Stringliste übergeben und muss nun eine DLL basteln, worüber LV die Liste einlesen kann und auch wieder eine Liste zurückgeben kann. Wie übergeb ich nun die Liste von der DLL zu Labview und wie bekomm ich sie wieder zurück? (DLL ist in C geschrieben)

Was für eine DB ist das? Kannst Du nicht das Database Toolkit oder eine der anderen Database Bibliotheken benützten?
Falls Du wirklich eine DLL basteln willst solltest Du schon einige C Programmiererfahrung haben. Ansonsten gibts ein grosses Crashfest und hast Du die Chance dass die Applikation spater immer mal wieder crasht.
Die DB ist in SQLLite geschrieben. Das Problem, was ich vergesehen hatte zu erwähnen ist, das die Liste die rein bzw. rausgeht nciht immer die gleiche Länge hat. Und ich nicht weiß wie ich das in C bzw. Labview zu C umsetzen kann, da es in C meines Wissens nur Datentypen mit einer festen Länge gibt.
(09.11.2011 14:52 )MrIzu schrieb: [ -> ]Die DB ist in SQLLite geschrieben. Das Problem, was ich vergesehen hatte zu erwähnen ist, das die Liste die rein bzw. rausgeht nciht immer die gleiche Länge hat. Und ich nicht weiß wie ich das in C bzw. Labview zu C umsetzen kann, da es in C meines Wissens nur Datentypen mit einer festen Länge gibt.

Da ist Dein Wissen aber etwas eingeschränkt. C verwendet Pointer die man in fast jeder beliebigen Länge anlegen kann. Aber das muss man alles explicit programmieren, da ist kein LabVIEW Environment das das alles für Dich handhabt. Erschwerend komt hinzu, dass LabVIEW für C Datentypen tatsächlich nur vorab bekannte Längen unterstützt. Das ist weil die LaVIEW Speicherverwaltung ganz anders funktioniert dann in C. Oder sagen wir besser, in C besteht keine eindeutige Konvention über Speicherverwaltung. Jeder Programmier hat da seine eigenen Idee, und wenn man eine Funktion aufruft ohne die dabei verwendete Idee genau zu berücksichtigen, crasht es halt einfach.

Um variable sized Daten zu übertragen muss man mit LabVIEW Datentypen arbeiten und dessen Memory Manager Funktionen im C Code verwenden um jeden einzelnen Pointer korrekt anzulegen und/oder freizugeben. Kein Problem für einen erfahrenen C Programmierer aber typischerwise ein beinaheunüberwindliches Problem für den Durchsnitts- LabVIEW Programmierer.
(09.11.2011 14:52 )MrIzu schrieb: [ -> ]Die DB ist in SQLLite geschrieben. Das Problem, was ich vergesehen hatte zu erwähnen ist, das die Liste die rein bzw. rausgeht nciht immer die gleiche Länge hat. Und ich nicht weiß wie ich das in C bzw. Labview zu C umsetzen kann, da es in C meines Wissens nur Datentypen mit einer festen Länge gibt.

Also was die Stringliste in C Code betrifft, es ist machbar, und es gibt da einige Vorbilder auch von mir in diversen Forenberichten auf lavag.org und forums.ni.com. Aber es gibt eine andere Lösung die viel einfacher ist. Google "LabVIEW sqllite" und Du kommst als ersten Link bei http://www.labview-tools.com/software/sqlite-api/. Nicht zu glauben wie unbekannt Google ist! Big Grin
Ist die Verwendung von SQLite schon festgelegt? Ich habe begonnen mit PostgresSQL so arbeiten. Die ist zwar nicht serverlos, kann aber auf dem Rechner installiert werden, auf dem auch das LV-Programm läuft. Über "localhost", ODBC-Treiber und das LabVIEW-Database-Toolkit klappt bisher alles wunderbar.
Problem wurde gelöst. Danke!
Das übergeben der Liste ist mittlerweile gelöst. Ich übergebe die Liste als einen kompletten String und nehm ihn in Labview auseinander. Danke für die Anregungen.
Referenz-URLs