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 

Pointer auf Subarray übergeben



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!

15.07.2012, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 15.07.2012 10:25 von rolfk.)
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Pointer auf Subarray übergeben
(07.07.2012 18:08 )Event Horizon schrieb:  Hallo zusammen!

Sorry für die Sendepause, ich hab noch 1000 andere Dinge nebenbei zu erledigen ;-)

Erstmal danke an rolfk für die ausführlichen Erläuterungen. Du hast recht, die Arrays müssen erstmal mit der benötigten Größe initialisiert werden. Das hatte ich auch im Original getan, das VI da ist nur ne Skizze, um das eigentliche Problem etwas besser hervor zu heben. Speicherverwaltung ist mir prinzipiell nicht fremd, nur wirds eben haarig, wenns um LV geht.


Zu der Sache mit dem selber Speicher alloziieren: Was genau schwebt dir da vor? LV 8.6 hat dafür anscheinend keine Funktionen. Im Prinzip stell ich mir grade vor, ein malloc() aus ner DLL zu nehmen, und dessen Rückgabewert - sofern größer 0 - dem setBuffer zu übergeben. Allerdings hab ich nun schon ein wenig mit einem malloc() rumgespielt, es scheint mir aber fast, daß der Speicher nach dem DLL-Knoten wieder freigegeben wird. So kann ich locker 1GB reservieren, das System zeigt danach aber nirgends einen so hohen Speicherverbrauch an.

Ansonsten bleibt wohl nur, ne eigene DLL als Wrapper um die ursprüngliche zu schreiben. Ich dachte, ich komm drumherum.

Ist zwar "Tüplischiissen" aber der Aufruf von C Funktionen wird in LabVIEW nicht grundsätzlich schwieriger dann wenn Du die Funktion aus C selber aufrufst. Der Unterschied ist dass Du das in C dauernd, immer, zu jedem Zeitpunkt selber tun musst, in LabVIEW praktisch nur wenn Du die Call Library Node verwendest um externen Code aufzurufen. Das ist weil LabVIEW genau wie .Net eine Managed Umgebung ist, und C eben nicht.

Ich wundere mich von wo Du malloc() aufzurufen gedenkst. Das ist eine C Runtime Funktion die so nicht auf eine offiziell zugängliche Weise über eine Call Library Node aufgerufen werden kann. Natürlich gibt es sie in msvcrt.dll aber das ist laut Microsoft ein private API das eine Applikation nicht verwenden soll. Anstelle davon kannst Du entweder HeapAlloc() und HeapFree() in kernel32.dll verwenden. Oder die LabVIEW Memory Manager Funktionen DSNewPtr() und DSDisposePtr(). Die zweite Gruppe ist verfügbar wenn man in der Call Library Node als Librarynamen "LabVIEW" (ohne Anführungszeichen und Gross- und Kleinschreibung beachten) einführt. Die erste ist das Standard Windows Heap Management, auf dem grundsätzlich auch malloc() und die LabVIEW DSNewPtr() Funktionen letzten Endes aufbauen, aber sie sind etwas komplizierter im Aufruf.

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
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: Pointer auf Subarray übergeben - rolfk - 15.07.2012 10:21

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.619 02.02.2018 10:59
Letzter Beitrag: Reiling
  Absturz durch unzulässige Pointer VS_03 3 10.331 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.020 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer auf Array mit Labview übertragen und darstellen lupus022 35 32.679 19.07.2013 10:53
Letzter Beitrag: lupus022
  Pointer und MoveBlock OXO 4 8.241 03.06.2013 16:31
Letzter Beitrag: OXO
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.081 11.05.2012 14:41
Letzter Beitrag: hawk72

Gehe zu: