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!

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.305
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 


Nachrichten in diesem Thema
Textuelle Ausgabe über DLL in LabView Textbox/Output - rolfk - 24.11.2010 13:46

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Pumpe in LabVIEW über Sytem Exec an und ausschalten lazfather 8 8.776 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.007 11.06.2013 10:44
Letzter Beitrag: rolfk
  Fortran-Programm über Labview starten jh1988 10 12.436 22.04.2013 19:28
Letzter Beitrag: rolfk
  Ansteuerung von xPC-Target über eingebundenes Simulinkmodell in LabVIEW AndreasT81 1 6.431 30.10.2010 08:02
Letzter Beitrag: Y-P
  Datenerfassung über C++ in LabVIEW exportieren abrissbirne 22 23.173 24.08.2007 12:04
Letzter Beitrag: rolfk
  DLL-"Ausgabe" in LabVIEW String-Indicator Anus+ 5 5.808 15.05.2006 15:42
Letzter Beitrag: oppossom

Gehe zu: