LabVIEWForum.de
Pointer to Array - 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: Pointer to Array (/Thread-Pointer-to-Array)



Pointer to Array - labrat - 07.02.2012 15:43

Hallo,

ich rufe mit einem DLL-Knoten eine Funktion namens "CopyBuffer" auf, die Daten (Grauwerte einer Kamera) in den Speicher schreibt. Die Funktion liefert einen Pointer, der auf das Array im Speicher verweist. Mit Hilfe der MoveBlock-Funktion konnte ich diese Daten bereits auslesen. Des Weiteren benöitgt die "CopyBuffer"-Funktion einen Wert für die Größe. Die Bilder haben eine Auflösung von 320x256 (16Bit), wodurch sich der entsprechende Wert dann ergibt.

Aber die "CopyBuffer" Funktion benötigt auch einen Pointer-Eingang. Hier habe ich momentan die beliebige Zahl 422916160 eingetippt. Müsste ich nicht hier eigentlich einen Pointer eintragen, der auf einen für das Bild reservierten Speicherplatz verweist?
Nur weiß ich nicht wie. Ich weiß nur, dass es - mit dem konstanten Pointer Wert - nicht richtig ist.

Vielen Dank schonmal


RE: Pointer to Array - rolfk - 08.02.2012 20:52

(07.02.2012 15:43 )labrat schrieb:  Hallo,

ich rufe mit einem DLL-Knoten eine Funktion namens "CopyBuffer" auf, die Daten (Grauwerte einer Kamera) in den Speicher schreibt. Die Funktion liefert einen Pointer, der auf das Array im Speicher verweist. Mit Hilfe der MoveBlock-Funktion konnte ich diese Daten bereits auslesen. Des Weiteren benöitgt die "CopyBuffer"-Funktion einen Wert für die Größe. Die Bilder haben eine Auflösung von 320x256 (16Bit), wodurch sich der entsprechende Wert dann ergibt.

Aber die "CopyBuffer" Funktion benötigt auch einen Pointer-Eingang. Hier habe ich momentan die beliebige Zahl 422916160 eingetippt. Müsste ich nicht hier eigentlich einen Pointer eintragen, der auf einen für das Bild reservierten Speicherplatz verweist?
Nur weiß ich nicht wie. Ich weiß nur, dass es - mit dem konstanten Pointer Wert - nicht richtig ist.

Vielen Dank schonmal

Wäre schon praktisch wenn man etwas C Kenntnisse hätte wenn man so was machen will. DLL Funktionen sind ganz einfach C Funktionen und ohne da wenigstens grundlegende Kenntnisse zu haben ist das Ansprechen von C Funktionen ziemlich sinnlos. Auch wenn Du dafür LabVIEW benützen willst kommt man nicht um etwas C Kenntnisse herum, wenn man das Interface zu der DLL machen will.

Ich habe die Funktionsdokumentation nicht gelesen, aber ziemlich sicher will die Funktion einen gültigen Buffer von genügend Grösse (und nicht nur etwas was einem Pointer gleicht). Das ist ein grosser Unterschied!

Bei C Funktionen ist grundsätzlich immer der Aufrufer zuständig um solchen Buffer von genügender Grösse bereitzustellen und das gilt auch wenn man so eine Funktion von LabVIEW aus aufrufen will. In LabVIEW geht das sogar super trivial mit der Initialize Array Funktion. Und Du kannst es sogar auch noch gleich als 2D Array anlegen, mit "Breite" Kolonnen und "Höhe" Reihen (oder eventuel andersum, das muss man jeweils experimentel ausprobieren). Dieses Array kannst Du dann an den Parameter verbinden der den Bufferpointer erhalten soll, und dann konfiguriert man diesen Parameter als Array of 16 bit Integers mit 2 Dimensionen, und sagt LabVIEW dass es den Array Data Pointer an die Funktion übergeben soll.


RE: Pointer to Array - labrat - 09.02.2012 16:41

Vielen Dank, hat funktionert!