LabVIEWForum.de
Datensatz einer Stuktur lesen... - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Datensatz einer Stuktur lesen... (/Thread-Datensatz-einer-Stuktur-lesen)



Datensatz einer Stuktur lesen... - Predator - 26.04.2007 07:53

hallo liebes LV forum...

ich habe folgendes problem und bitte um hilfe: ich habe eine funktion einer DLL, die den konfigurationsdatensatz einer karte ausgibt.

funktion: BOOL GetKonfig (HANDLE hDevice, OUT_READ_KONFIG*pStructKonfig, ULONG* pSimpleStatus)

laut beschreibung hat die struktur folgendes aussehen:

typdef struct_OUT_READ_KONFIG
{
char ...[20]
char ...[20]
float ...[2]
.
.
.
}

das HANDLE und der zeiger des Statusregisters machen mir keine probleme... ich habe lediglich probleme mit dem pointer auf die struktur. die funktion gibt mir doch den pointer aus. aber wie komme ich mit dem pointer an meine daten? ich hatte vorerst angenommen das ich den gesamten datensatz in ein array ausgegeben bekomme und mir dann in LV die benötigten daten heraussuche. blos in der struktur befinden sich ja daten unterschiedlichen typs. Kann mir da jemand helfen?

vielen dank im voraus...

gruß dennis


Datensatz einer Stuktur lesen... - cb - 26.04.2007 08:27

' schrieb:ich habe lediglich probleme mit dem pointer auf die struktur. die funktion gibt mir doch den pointer aus. aber wie komme ich mit dem pointer an meine daten?

in dem du die Call Library Node verwendest und bei der Konfiguration angibst, dass ein Zeiger übergeben wird. Die Call Library Node holt dann die Daten nach LabVIEW ...

[attachment=6367]

mehr sag ich dazu nicht, weil in diesem Forum seit Monaten der Thread zum Thema "DLL Tutorial" aktiv istWink


Datensatz einer Stuktur lesen... - Predator - 26.04.2007 09:18

hallo... vielen dank für deine antwort! jedoch hat das mir nicht weitergeholfen. das ich das mit der call library function machen muss, wusste ich vorher. ich habe nur das (verständnis) problem mit der struktur. wenn ich einen pointer übergeben bekomme, wie navigiere ich den pointer in LV?

zur erklärung:

typ struct_OUT_READ_KONFIG
{
char Karte[20]
char Aufsteckfilter[20]
float Bandgrenzen[2]
.
.
.
}

ich möchte z.B. jetzt die daten des Aufsteckfilters auslesen. in der textlichen programmierung würde man schreiben: struct_OUT_READ_KONFIG.Aufsteckfilter[...]. Wie mache ich das in LV, wie navigiere ich den Pointer und hole mir die Daten die ich benötige?
Gruß Dennis


Datensatz einer Stuktur lesen... - cb - 26.04.2007 10:34

' schrieb:Wie mache ich das in LV, wie navigiere ich den Pointer

gar nicht. LV kennt keine Pointer und keine Pointer Arithmetik.

' schrieb:hole mir die Daten die ich benötige?

die einzige Chance die du hast, ist, die Rückgabe-Struktur in einen Cluster zu pressen und dann mit Unbundle zu arbeiten. Wenn du Strings im struct verwendest ist das allerding so eine Sache, die müssen ebenfalls *richtig* übergeben werden. Wenn du Zugriff auf den Quellcode der DLL hast, dann hast du die Chance die extcode.h einzubinden und in der DLL die Daten auf LV Format umzubiegen. Wenn nicht, kann es sein, dass du Pech hast und gar nicht an die Daten rankommst.

Im Zweifel kann ich dir dazu nur empfehlen dieses Tutorial auf ni.com zu lesen


Datensatz einer Stuktur lesen... - Predator - 27.04.2007 09:15

vielen dank nochmal... habe das problem gelöst. es lag nicht am knoten, sondern es fehlte eine funktion zum öffnen und schließen der karte. das problem hat sich also geklärt...
jedoch jetzt habe ich ein nächstes problem: wie oben beschrieben kommen aus der struktur zeichen (char), die als zahl im array stehen. wie kann ich jetzt die zahlen umcodieren, dass ich sie als ASCII code lesen kann? gibt es in LV eine funktion dafür? habe die hilfe durchsucht, bin aber nicht fündig geworden...

mfg
dennis


Datensatz einer Stuktur lesen... - jg - 27.04.2007 10:21

Hallo, Dennis,

da gibt es bei den Umwandlungsfunktionen (entweder unter Numerisch oder String) die Funktionen "String to Byte Array" und "Byte Array to String". Probier die doch mal aus. Die wandeln auf jeden Fall korrekt nach ASCII.

MfG, Jens


Datensatz einer Stuktur lesen... - Predator - 27.04.2007 11:48

super vielen dank...
es hat mit byte array to string funktioniert...
mfg
dennis


Datensatz einer Stuktur lesen... - rolfk - 12.06.2007 13:34

' schrieb:gar nicht. LV kennt keine Pointer und keine Pointer Arithmetik.
die einzige Chance die du hast, ist, die Rückgabe-Struktur in einen Cluster zu pressen und dann mit Unbundle zu arbeiten. Wenn du Strings im struct verwendest ist das allerding so eine Sache, die müssen ebenfalls *richtig* übergeben werden. Wenn du Zugriff auf den Quellcode der DLL hast, dann hast du die Chance die extcode.h einzubinden und in der DLL die Daten auf LV Format umzubiegen. Wenn nicht, kann es sein, dass du Pech hast und gar nicht an die Daten rankommst.

Im Zweifel kann ich dir dazu nur empfehlen dieses Tutorial auf ni.com zu lesen

Eine andere Möglichkeit die zwar meist schwieriger scheint aber meiner Meinung nach in manchen Fällen einfacher ist, ist das ganze als ein Array of Bytes zu behandeln und die verschiedenen Informationen in LabVIEW aus dem Array herauszupicken.

Rolf Kalbermatter