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:

DLL einen String zurückgeben lassen



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!

20.03.2012, 12:19 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2012 12:20 von rolfk.)
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einen String zurückgeben lassen
Du scheinst hier Eingabe- und Ausgabeparameter und den Rückgabewert einer Funktion gleich zu behandelen und das ist nicht ganz korrekt.

LabVIEW verwendet ein eigenes Speicherverwaltungssystem das noch am ehsten mit managed Code in .Net übereinkommt, aber nicht kompatibel ist (denn das LabVIEW System wurde ungefähr 20 Jahre vor .Net entwickelt). Das LabVIEW Speicherverwaltungssystem erlaubt es um innerhalb von LabVIEW Code (also innerhalb des managed Systems) beliebig Datenbuffer zwischen Komponenten auszutauschen. Aber das DLL Interface basiert vollkommen auf C Konventionen, die sich vor allem darin auszeichnen dass fast keinen Konventionen bestehen. Fast alles ist theoretisch möglich und zugelassen aber wenn der Aufrufer und Augerufene sich nicht an die jeweiligen, arbiträren, Konventionen halten, dann geht gar nichts mehr.

LabVIEW limitiert diese Interface deshalb bewusst und eine dieser Limitation ist, dass ausser für LabVIEW Native Datentypen (die damit dann im LabVIEW Managed System funktionieren) immer der Aufrufer allen Speicher für alle Parameter bereitstellen muss. Den Speicher fUr einen Rückgabewert einer Funktion kann aber eben nicht durch den Aufrufer bereitgestellt werden. Die Alternativen um doch Arrays und Strings als Rückgabewert zuzulassen sind alle grundsätzlich nicht standardisiert und führen entweder zu Einschränkungen bei Multithreadaufrufen oder zu Speicherlecks wenn der Aufrufer vergisst den zurückgegebenen Buffer nicht sauber zu deallozieren. Da er ihn aber nicht angelegt hat ist die Chance gross dass er das eben doch vergisst. Vorsorgehalber immer deallozieren ist aber genau so schlecht, denn wenn die Funktion den Wert im statischen Speicher zurückgibt wird das Betriebssystem gewaltig reklamieren, wenn versucht wird diesen Pointer zu deallozieren. Die Einschränkung der möglichen Datentypen im DLL Interface ist also eine bewusste und gute Wahl der LabVIEW Entwickler.

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


Nachrichten in diesem Thema
RE: DLL einen String zurückgeben lassen - rolfk - 20.03.2012 12:19

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL soll String zurückgeben Honeygirl24 7 6.395 14.10.2008 02:13
Letzter Beitrag: eg
  Array aus DLL zurückgeben DarthZiu 6 6.036 20.04.2006 18:53
Letzter Beitrag: Martin.Henz

Gehe zu: