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, 11:24
Beitrag #1

arphex Offline
Lab_Net
**


Beiträge: 52
Registriert seit: Jun 2011

NI Dev Suite /LV Prof. 2013 /TS2013_6.1 /Vision 2013
2011
DE

8****
Deutschland
DLL einen String zurückgeben lassen
hallo,

ich habe ein VI erstellt welches mir einen HEX-Code eines externen Prüflings abfrägt.

Nun, dieser HexCode liegt in einem unsigned Byte vor und es wird
a) korrekt in LabView angezeigt wird, wenn ich das u8 Anzeigeelement (Array) verwende und
b) korrekt in LabView angezeigt wird, wenn ich u8 in String konvertiere

Ich würde aber gerne den String zurückgeben lassen.
Dies ist jedoch nicht ganz trivial.
Pascal-String-Pointer wären mir lieber, aber es gibt in jedem Fall ja nur char-Arrays...

Wie kann ich den VI-Ausgang aktivieren?

[Bild: 2F9KhOKr7Y]

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.03.2012, 11:57
Beitrag #2

Hook1986 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 149
Registriert seit: Jan 2012

2010
2011
DE_EN


Deutschland
RE: DLL einen String zurückgeben lassen
Hallo,

die Funktion ist vom Typ "void". Diese hat keinen Rückgabewert. Du kannst also nicht beim Aufruf der Funktion sagen, dass du etwas haben willst, was deine Funktion (die dll) garnicht hergibt.

MfG Carsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
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
20.03.2012, 13:15
Beitrag #4

arphex Offline
Lab_Net
**


Beiträge: 52
Registriert seit: Jun 2011

NI Dev Suite /LV Prof. 2013 /TS2013_6.1 /Vision 2013
2011
DE

8****
Deutschland
RE: DLL einen String zurückgeben lassen
@hook & rolf, danke für eure Antworten.

Ich weiss das ich einen void-Typ habe, weiß aber nicht wie ich diesen ändern kann, dass er mir was zurückgibt.
dies habe ich im Frontpanel rechts oben mit dem Eimer-Symbol zwar gesetzt, jedoch hat sich daran nichts geändert.

Auch in Post #3 verstehe ich nicht warum ich vorsorgehalber immer deallozieren sollte. Mit was mache ich das denn?
Die Alloziierung übernimmt doch LabView in den meisten Fällen oder?

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.03.2012, 14:17 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2012 14:22 von rolfk.)
Beitrag #5

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
(20.03.2012 13:15 )arphex schrieb:  Auch in Post #3 verstehe ich nicht warum ich vorsorgehalber immer deallozieren sollte. Mit was mache ich das denn?
Die Alloziierung übernimmt doch LabView in den meisten Fällen oder?

Das kannst du so gar nicht machen und LabVIEW kann es nicht automatisch da es nicht weiss ob es das machen soll oder nicht und wenn es falsch liegt, dann geht es gut falsch. Dies ist aber ein Problem das nur auftritt wenn Du eine DLL in LabVIEW mit der Call Library Node aufrufst und das tust Du meines Erachtens hier gar nicht.

Dein Problem liegt anders da Du ja in LabVIEW eine DLL erstellen willst. Das ist etwas komplet anderes (und LabVIEW intern noch viel komplizierteres).

Derr DLL Generator Interface unterstützt keine Strings als Rückgabewerte (wegen der Gründe kann man meinen vorigen Beitrag lesen aber wenn das zu kompliziert ist, nimmst Du einfach mal an dass das so ist). Da Dein VI aber scheinbar keine anderen Frontpanelelemente hat, kannst Du in der DLL Konfiguration halt auch nur eines dieser nicht bestehenden anderen Frontpanelelemente an den Rückgabewert der DLL Funktion zuweisen, also 0, nada, nientes.

Natürlich liesse sich in dieser Hinsicht einiges mehr eindeutig sagen, wenn Du im ersten Beitrag statt eines Screenshots der Konfiguration ganz einfach Dein DLL Project angehängt hättest. Ein Bild sagt zwar oft mehr dann tausend Worte, aber der Sourcecode ist immer noch die ultimative Instanz bei Programmierfragen (und um ein simples DLL Project mit Bildern zu dokumentieren hast Du eigentlich schon minimal 3 Bilder nötig (VI Front Panel, VI Diagramm, DLL Funktions Interface Konfiguration und selbst das gibt noch nicht unbedingt alle wichtigen Informationen her). Big Grin

Aber Du brauchst den Ausgangsstring ja auch nicht als Rückgabewert zu konfigurieren, denn den hat Dir LabVIEW schon als Funktionsparameter "Ausgabe" eingefügt, und Strings als Funktionsparameter zu übergeben ist wesentlich eindeutiger definiert in C, was die Speicherverwaltung davon angeht.

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
20.03.2012, 14:52
Beitrag #6

arphex Offline
Lab_Net
**


Beiträge: 52
Registriert seit: Jun 2011

NI Dev Suite /LV Prof. 2013 /TS2013_6.1 /Vision 2013
2011
DE

8****
Deutschland
RE: DLL einen String zurückgeben lassen
Hi,

ich verstehe was du meinst.
Erstmal im Anhang die .zip-Datei zur verdeutlichung des Problems.

Ich habe mehrere Ausgaben, von denen ich aber initial erstmal die Eingabe und Ausgabe verwenden möchte.
Diese würde erstmal für die Kommunikation mit der COM-Schnittstelle reichen.

Ansonsten ist das noch eine große Construction

Gruß


Angehängte Datei(en)
0.0 .zip  DLLs.zip (Größe: 36,9 KB / Downloads: 277)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.03.2012, 13:23
Beitrag #7

arphex Offline
Lab_Net
**


Beiträge: 52
Registriert seit: Jun 2011

NI Dev Suite /LV Prof. 2013 /TS2013_6.1 /Vision 2013
2011
DE

8****
Deutschland
RE: DLL einen String zurückgeben lassen
Hallo nochmal,
ich habe jetzt einen Thread gefunden der das Thema anscheinend behandelt.

Nur verstehe ich den letzten Antwortsatz nicht, kann mir das jemand erklären?

http://forums.ni.com/t5/LabVIEW/Set-Retu...-p/1075727
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2012, 13:34
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: DLL einen String zurückgeben lassen
Hallo Arphex,

Zitat:Nur verstehe ich den letzten Antwortsatz nicht,
Zitat:Thanks for you help - I got it figured out
Ich glaube, das musst du etwas besser spezifizieren...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2012, 13:35
Beitrag #9

arphex Offline
Lab_Net
**


Beiträge: 52
Registriert seit: Jun 2011

NI Dev Suite /LV Prof. 2013 /TS2013_6.1 /Vision 2013
2011
DE

8****
Deutschland
RE: DLL einen String zurückgeben lassen
hehe, stimmt.

Message #4: http://forums.ni.com/t5/LabVIEW/Set-Retu...17#M476699
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2012, 13:59
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: DLL einen String zurückgeben lassen
http://translate.google.com/#en|de|Thank...ured%20out

In diesem Fall übersetzt Google völlig korrekt.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


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

Gehe zu: