INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Pointer to Array



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.02.2012, 15:43 (Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2012 15:44 von labrat.)
Beitrag #1

labrat Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Oct 2011

2011 DS2
2008
DE



Pointer to Array
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


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.02.2012, 20:52
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Pointer to Array

Akzeptierte Lösung

(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.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.02.2012, 16:41
Beitrag #3

labrat Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Oct 2011

2011 DS2
2008
DE



RE: Pointer to Array
Vielen Dank, hat funktionert!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.602 02.02.2018 10:59
Letzter Beitrag: Reiling
  Absturz durch unzulässige Pointer VS_03 3 10.315 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.011 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer auf Array mit Labview übertragen und darstellen lupus022 35 32.561 19.07.2013 10:53
Letzter Beitrag: lupus022
  Pointer und MoveBlock OXO 4 8.225 03.06.2013 16:31
Letzter Beitrag: OXO
  Pointer auf Subarray übergeben Event Horizon 5 7.428 15.07.2012 10:21
Letzter Beitrag: rolfk

Gehe zu: