' 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>