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 

Textuelle Ausgabe über DLL in LabView Textbox/Output



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!

17.11.2010, 00:41 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2010 08:39 von jg.)
Beitrag #1

Effemfour Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Jul 2006

8.5
2005
de

1150
Oesterreich
Textuelle Ausgabe über DLL in LabView Textbox/Output
Hallo zusammen,

ich habe folgendes Problem:
ich würde gerne einen C-Code und eine GTK-GUI auf eine LabView-GUI umschreiben. Um C-Code in LabView einzubinden, muss ich ja bekanntlich eine DLL erzeugen und diese mittels CLF einbinden.

Nun stehe ich vor dem Problem, dass ich gerne alle textuellen Ausgaben des alten GUI auch mit LabView ausgeben würde, aber nicht genau weiss wie.
Ich würde also gerne in LabView ein Textfeld "Output" (String/char) erzeugen, dass meine im C-Code festgelegten Texte ausgibt.

Anbei ein Beispiel-VI und der Beispiel C-Code. DLL ist angehängt, weil sie 10MB hat und für die Frage nicht unbedingt notwendig ist.

/* Call Library source file */

#ifdef __MINGW32__
#undef WIN32
#undef _WIN32
#undef __WIN32__
#define linux 1
#endif
#include "platdefines.h"
#include "extcode.h"
#include "fundtypes.h"
#ifdef __MINGW32__
#undef linux
#define WIN32 1
#define _WIN32 1
#define __WIN32__ 1
#endif

__declspec (dllexport) int32_t connectTwTesterLabView(int8_t *Connected, char Output[]);

int32_t connectTwTesterLabView(int8_t *Connected, char Output[])
{

*Connected = 1;
Output = "twTester connected";
return 0;

}


Im Beispiel VI würde ich gerne "twTester connected" ausgeben. Gebe aber nur "o" aus (klar wenn man sich das VI anschaut). Wie muss ich den Code und das VI ändern damit ich mit "Output" beliebige Texte, die ich im Code festlege, ausgeben kann?

Es gibt bereits einen ähnlichen Thread, aber hier wurde auch keine richtige Antwort gegeben:
http://www.labviewforum.de/index.php?showtopic=5668

Dankeschön und Gruß
Lukas
Lv85_img


Angehängte Datei(en)
Sonstige .vi  test_USBConnection.vi (Größe: 10,74 KB / Downloads: 238)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.11.2010, 00:59 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2010 01:00 von eg.)
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Textuelle Ausgabe über DLL in LabView Textbox/Output
Ich weiß nicht wie du dein CLFN konfiguriert hast, da ich kein LV zur Hand habe. Aber ich würde den Parameter "Output" als ein U8-Array definieren und dann mit Byte Array To String in ein String in LV umwandeln.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.11.2010, 12:21
Beitrag #3

Effemfour Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Jul 2006

8.5
2005
de

1150
Oesterreich
Textuelle Ausgabe über DLL in LabView Textbox/Output
Das habe ich nun probiert. Ich bekomme dann aber mit meinem Code keinen Output mehr.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.11.2010, 13:02 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2010 13:05 von abrissbirne.)
Beitrag #4

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Textuelle Ausgabe über DLL in LabView Textbox/Output
Versuch mal sowas in der Art.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>__declspec (dllexport) int32_t connectTwTesterLabView(int8_t *Connected, LStrHandle Output);

int32_t connectTwTesterLabView(int8_t *Connected, LStrHandle Output)
{

*Connected = 1;
char* temp = "twTester connected";
__int32 len = strlen(temp);
(*Output)->cnt = len;
strcpy((*Output)->str, temp);
return 0;

}</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.11.2010, 14:21
Beitrag #5

Effemfour Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Jul 2006

8.5
2005
de

1150
Oesterreich
Textuelle Ausgabe über DLL in LabView Textbox/Output
Danke!! Damit funktionierts!
Die 2 Underscores vor "int32 len" müssen weggelassen werden und der Code produziert einige Warnings, aber der eigentliche Weg zur Ausgabe ist nun klar!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.11.2010, 14:30
Beitrag #6

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Textuelle Ausgabe über DLL in LabView Textbox/Output
' schrieb:Danke!! Damit funktionierts!
Die 2 Underscores vor "int32 len" müssen weggelassen werden und der Code produziert einige Warnings, aber der eigentliche Weg zur Ausgabe ist nun klar!
War auch ein ungetesteter Code. Denke das strcpy eine Warnung ausspuckt, aber immerhin weist du nun wies geht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.11.2010, 13:46 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2010 14:05 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Textuelle Ausgabe über DLL in LabView Textbox/Output
' schrieb:Versuch mal sowas in der Art.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>__declspec (dllexport) int32_t connectTwTesterLabView(int8_t *Connected, LStrHandle Output);

int32_t connectTwTesterLabView(int8_t *Connected, LStrHandle Output)
{

*Connected = 1;
char* temp = "twTester connected";
__int32 len = strlen(temp);
(*Output)->cnt = len;
strcpy((*Output)->str, temp);
return 0;

}</div>

WARNUNG: Dieser Code funktioniert nur ohne spurious Crashes wenn man sicher stellt dass das LabVIEW String Handle auf der linken Seite der Call Library Node mit einer Stringkonstanten verbunden ist die minimal strlen(temp) + 1 Character enthält (+1 wegen dem NULL Termination Character der vn strcpy() (für LabVIEW Strings völlig unnötigerweise) mitkopiert wird. Ansonsten ist der Handle nicht lang genug und überschreibt strcpy Speicher der für etwas anderes gebraucht wird und das führt über kurz oder lang zu unerklärlichen und nicht immer leicht reproduzierbaren Crashes.

Besser wäre es um vor dem strcpy() den Handle mittels der LabVIEW Speichermanagerfunktion NumericArrayResize() explizit auf die nötige Grösse zu resizen um sicherzustellen dass da genug Speicher vorhanden ist. Etwas in der Art:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
#include "extcode.h"

__declspec (dllexport) int32_t connectTwTesterLabView(int8_t *Connected, LStrHandle Output);

MgErr connectTwTesterLabView(int8_t *Connected, LStrHandle Output)
{
char* temp = "twTester connected";
int32 len = strlen(temp);
MgErr err = NumericArrayResize(uB, 1, &Output, len);
if (!err)
{
MoveBlock(temp, LStrBuf(*Output), len); /* similar to memcpy since LabVIEW strings can contain embedded 0 chars */
LStrLen(*Output) = len;
*Connected = 1;
}
return err;
}</div>

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Pumpe in LabVIEW über Sytem Exec an und ausschalten lazfather 8 8.842 30.10.2014 10:14
Letzter Beitrag: jg
  VC++ 6.0 DLL ins Labview--Ist es möglich output type as char*? Danyang 1 5.032 11.06.2013 10:44
Letzter Beitrag: rolfk
  Fortran-Programm über Labview starten jh1988 10 12.515 22.04.2013 19:28
Letzter Beitrag: rolfk
  Ansteuerung von xPC-Target über eingebundenes Simulinkmodell in LabVIEW AndreasT81 1 6.447 30.10.2010 08:02
Letzter Beitrag: Y-P
  Datenerfassung über C++ in LabVIEW exportieren abrissbirne 22 23.379 24.08.2007 12:04
Letzter Beitrag: rolfk
  DLL-"Ausgabe" in LabVIEW String-Indicator Anus+ 5 5.823 15.05.2006 15:42
Letzter Beitrag: oppossom

Gehe zu: