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 

Buffer reservieren + Pointer auslesen



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!

04.09.2008, 16:19
Beitrag #4

Peter Knauer
Unregistered


 







Buffer reservieren + Pointer auslesen
Also, das mit den Pointern geht so:

Du initialisierst ein 1D-Array mit der Größe BxHxBit/8, drahtest dieses an den Eingang des Pointers des DLL-Aufrufs an und stellst als Typ "Array, U8, Array Data Pointer" ein.
Das funktioniert bei einer dll in einem Projekt von mir, die was ganz ähnliches macht (Ein Bild einer kamera in einen per zeiger übergebenen Speicherbereich schreiben) ganz gut.

Meine Anschlussfrage ist nun allerdings:
Meine dll muss 2 Mal aufgerufen werden: Beim ersten Mal wird die Anfangsadresse des allokierten Speichers übergeben, Funktion:
INT is_SetAllocatedImageMem (HIDS hf, INT width, INT height, INT bitspixel, char* pcImgMem, int* pid)

beim zweiten Mal wird dieser Speicher an einen Ringpuffer angehängt:
INT is_AddToSequence (HIDS hf, char* pcImgMem, INT nID)

Der zweite Teil funktioniert nun leider nur beim 1. Durchlauf einer Schleife. Ab dem 2. Aufruf klappt es nicht mehr, es wird ein Fehlercode aus der dll zurückgegeben. Und zum debuggen würde ich nun gern sehen, on mglw. beim 2. Aufruf die selbe Speicheradresse übergeben wurde. Dann könnte ich verstehen, daß die Ringpuffer-Funktion da meckert.
Das verrückte ist noch: Mache ich den 2. Aufruf nicht in einer Schleife, sondern einfach durch eine nachgeschaltete Kopie der beiden Aufrufe, dann funktioniert es! Verrückt.
Ich muss aber leider ca. 90 Frames allokieren, und kann/will diese beiden Funktionen nicht neunzigmal hintereinander kopieren.

Wie kann man sich denn also die tatsächliche Speicheradresse ausgeben lassen, die der dll übergeben wird? Damit könnte ich das mal überprüfen, ob die Crux schon beim Allokieren liegt.

Es gibt nun darüberhinaus noch eine weitere Funktion der dll:
INT is_AllocImageMem (HIDS hf, INT width, INT height, INT bitspixel, char** ppcImgMem, INT* pid)

Damit wird der Speicher dll-intern selbst allokiert. Ausgegeben wird hier nun wiederum die Speicheradresse. Diese bekomme ich diesmal allerdings nicht als Array-Pointer, sondern in den ersten 4 Stellen IM Array. Da wäre nun die Frage andersherum: Wie mache ich aus dieser Rückgabe wieder einen Pointer, um diesen der Ringpuffer-Funktion zu übergeben?

Danke schonmal für alle Hinweise.

Ich arbeite übrigens mit einer ueye-Kamera von ids-imaging. Hat jemand vielleicht sogar speziell mit deren dlls und LabVIEW Erfahrungen?
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Buffer reservieren + Pointer auslesen - Peter Knauer - 04.09.2008 16:19
Buffer reservieren + Pointer auslesen - Peter Knauer - 05.09.2008, 00:05
Buffer reservieren + Pointer auslesen - Peter Knauer - 05.09.2008, 15:35
Buffer reservieren + Pointer auslesen - Peter Knauer - 05.09.2008, 23:31
Buffer reservieren + Pointer auslesen - Peter Knauer - 09.09.2008, 10:50

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

Gehe zu: