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 in LabVIEW Erstellen, String als Rückgabewert?



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!

13.02.2015, 14:06
Beitrag #1

andiauskaindorf Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Feb 2015

2013
1998
EN


Oesterreich
DLL in LabVIEW Erstellen, String als Rückgabewert?
Liebe LabVIEW Gemeinde

Ich möchte mit dem Appliation Builder eine DLL erstellen, die in einer bestehenden Software eingebunden werden soll. Die Prototypendefinition ist da bereits vorgegeben.
Der Rückgabewert soll nun ein STRING sein (z.b. PC Name etc).

So wie es aussieht, ist es nur möglich, eine numerische Zahl als Rückgabewert auszuwählen. Terminals andere Datentypen stehen nicht zur Auswahl, obwohl ich sie ebenfalls am Connector Pane verdrahtet habe.

Den String als Pointer in einem weiteren Argument zu übergeben wäre ein Workaround, aber wie Eingangs schon erwähnt, ist die Prototypendefinitionn bereits vorgegeben. Das ist also für mich keine Lösung.

Weiss da jemand Abhilfe?

Ich verwende LabVIEW 2013 (32 bit)

Vielen Dank im Voraus.


Angehängte Datei(en) Thumbnail(s)
   
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.02.2015, 23:28
Beitrag #2

teegee Offline
LVF-Grünschnabel
*


Beiträge: 49
Registriert seit: Jan 2015

2014
2003
EN


Sonstige
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
Haettest du in deinem GetSystemName.vi den indicator mit der connector pane verlinkt, wuerde dein Dialog so aussehen:
   
Den "return value" sollte man verwenden, um Fehler, die waehrend der Abarbeitung der Funktion aufgetreten sind, zurueck zu liefern. Den string (oder pointer darauf) musst du als parameter uebergeben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.02.2015, 08:35
Beitrag #3

andiauskaindorf Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Feb 2015

2013
1998
EN


Oesterreich
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
Hallo teegee

Danke für deine Antwort. Dieser Weg ist bekannt, und leider ist das nicht die Lösung. Das aufrufende Programm (nicht von mir, nicht änderbar) erwartet leider den String als RETURN VALUE, und genau hier lässt LabVIEW leider nur die Zuweisung eines NUMERIC Indicators zu. Scheint eine echte Limitierung von LabVIEW zu sein. Nicht einmal ein BOOL Wert lässt sich zuweisen - hab das schon versucht. Bei BOOL ist das aber nicht so tragisch, ein UINT8 mit dem Wert 0 oder 1 würde "von der Gegenseite" korrekt als BOOL WERT verstanden werden.
Das brachte mich auch auf einen möglichen Lösungsansatz: Ein STRING POINTER ist doch im Grunde genommen auch nichts anderes als ein Zahlenwert, der einer Speicherstelle anzeigt. Vielleicht gibt es ja einen Trick, einen LabVIEW STRING Wert in eine numerische Speicheradresse zu verwandeln, und diesen dann als Wert zu übergeben. Ich weiß, das ist schon etwas "bizarr" - aber vielleicht der einzig gehbare Ausweg.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.02.2015, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2015 11:51 von dali4u.)
Beitrag #4

dali4u Offline
LVF-Stammgast
***


Beiträge: 298
Registriert seit: Aug 2008

12SP1, 14SP1
2007
DE


Deutschland
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
Hier gibt's eine gute Erklärung dazu:
http://zone.ni.com/reference/en-XX/help/...g_options/

Bei Stackoverflow ist auch noch was:
http://stackoverflow.com/questions/26906...ction-node
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.02.2015, 22:46
Beitrag #5

teegee Offline
LVF-Grünschnabel
*


Beiträge: 49
Registriert seit: Jan 2015

2014
2003
EN


Sonstige
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
(16.02.2015 08:35 )andiauskaindorf schrieb:  Das brachte mich auch auf einen möglichen Lösungsansatz: Ein STRING POINTER ist doch im Grunde genommen auch nichts anderes als ein Zahlenwert, der einer Speicherstelle anzeigt. Vielleicht gibt es ja einen Trick, einen LabVIEW STRING Wert in eine numerische Speicheradresse zu verwandeln, und diesen dann als Wert zu übergeben. Ich weiß, das ist schon etwas "bizarr" - aber vielleicht der einzig gehbare Ausweg.

Damit kommst du nicht weit.
1. Der return type ist uint8, pointer sind 32 oder 64 bit lang
2. Das Programm, was dll aufruft, sollte den Platz fuer die Variable im Speicher bereitstellen. Ansonsten laeufst du in Speicher management Probleme rein. Mit einer Ausnahme: die dll hat eine Funktion, die den Speicherplatz wieder freigibt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.02.2015, 09:00
Beitrag #6

andiauskaindorf Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Feb 2015

2013
1998
EN


Oesterreich
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?

Akzeptierte Lösung

Danke Dali4u

Unter https://decibel.ni.com/content/docs/DOC-9091 habe ich Hinweise gefunden, die mir weitergeholfen haben.
Wie ursprünglich vermutet, ist es möglich, den String Indicator in LabVIEW in einen Pointer zu verwandeln und diesen Wert als NUMERIC RETURN VALUE auszuwählen. Die aufrufende Funktion kann dann einfach den Rückgabewert als CStr* interpretieren.


Angehängte Datei(en) Thumbnail(s)
   
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.02.2015, 17:43
Beitrag #7

dali4u Offline
LVF-Stammgast
***


Beiträge: 298
Registriert seit: Aug 2008

12SP1, 14SP1
2007
DE


Deutschland
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
Rückmeldung mit einer Lösung inkl. Anleitung als Bild Top1Top1Top1
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.02.2015, 21:03 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2015 21:04 von rolfk.)
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
(17.02.2015 09:00 )andiauskaindorf schrieb:  Danke Dali4u

Unter https://decibel.ni.com/content/docs/DOC-9091 habe ich Hinweise gefunden, die mir weitergeholfen haben.
Wie ursprünglich vermutet, ist es möglich, den String Indicator in LabVIEW in einen Pointer zu verwandeln und diesen Wert als NUMERIC RETURN VALUE auszuwählen. Die aufrufende Funktion kann dann einfach den Rückgabewert als CStr* interpretieren.

Das hat aber einen "kleinen" Schönheitsfehler. Jedesmal wird mit DSNewPtr() ein Speicher alloziert. Diesen Speicher muss der Aufrufer dann explizit mit DSDisposePtr() wieder deallozieren oder Du produzierst bei jedem Aufruf ein Memoryleak. Da die Aufrufende Applikation bereist besteht ist aber die Chance dass diese so angepasst werden kann genau so gross, wie den Funktionsaufruf zu veränderen und den String als Parameter zu übergeben, also wohl nicht.

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
19.02.2015, 08:34
Beitrag #9

andiauskaindorf Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Feb 2015

2013
1998
EN


Oesterreich
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
Danke Rolf für deinen Hinweis, das ist ein tatsächlich etwas, was ich noch nicht bedacht habe.
Ich könnte den Pointer zwar noch in der selben Funktion deallokieren, aber damit ist eine sichere Datenübergabe wohl nicht mehr gewährleistet...
Ich werde also doch den Weg gehen müssen, mir meine Funktionen von einem C Programmierer "umverpacken" zu lassen.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.02.2015, 23:04 (Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2015 23:04 von rolfk.)
Beitrag #10

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL in LabVIEW Erstellen, String als Rückgabewert?
(19.02.2015 08:34 )andiauskaindorf schrieb:  Danke Rolf für deinen Hinweis, das ist ein tatsächlich etwas, was ich noch nicht bedacht habe.
Ich könnte den Pointer zwar noch in der selben Funktion deallokieren, aber damit ist eine sichere Datenübergabe wohl nicht mehr gewährleistet...
Ich werde also doch den Weg gehen müssen, mir meine Funktionen von einem C Programmierer "umverpacken" zu lassen.

Ja! Deallozieren um dann zu hoffen dass der Speicher noch gültig ist wenn Dein aufrufendes Programm ihn liest ist minimal russisch Roulette spielen. Es kann 10 mal gut gehen aber das 11te Mal knallts!

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  LabVIEW 7.1 exe erstellen Fumik 3 7.536 19.06.2010 13:20
Letzter Beitrag: rolfk
  LabVIEW stürzt ab beim erstellen eines Installers Carsten0815 3 5.458 29.08.2007 09:04
Letzter Beitrag: Y-P
  LabVIEW Exe erstellen tommyboy 5 17.520 19.01.2007 15:08
Letzter Beitrag: A.Berndsen
  Datei erstellen unter LabVIEW? JohnSilver 1 7.541 26.01.2006 09:53
Letzter Beitrag: Oliver Listing

Gehe zu: