acces violation fehlermeldung
-
aber das ergebniss stimmt ja wene ich im debug mode durchgeh kommt ZWBus richtig nzurück!!
ausserdem wird bei iEnter die länge des gelieferten string überl ptrl zurückgegeben!!
aber was könnt den helfen?? weil LV nur ein zeichen ist!!mfg hans
-
Du hast das ganze etwas umständlich formuliert. Diese ganzen Hilfspointer (ptrl, ptrbus) brauchst du nicht. Wenn du sie weglässt, siehst du gleich das erste Problem
IeEnter (PID, ID , ptrbus, ptrl)Diese Funktion schreibt ja höchstwahrscheinlich etwas in ptrbus. ptrbus ist aber gleich ZWBus.c_str(). Das ist ein konstantes char* Array des internen Speichers eines AnsiStrings. Da darfst du nichts reinschreiben. Erzeuge dir ein temporäres char* dafür.
Was ist LV? Ein try/catch um das StrToFloat wäre auch sinnvoll (falls keine Zahl da drin ist).
Versuchs mal damitunsigned short l=1; AnsiString ZWBus = "LV"; ZWBus += LV; ZWBus += ";V="; l = ZWBus.Length(); int ok = IeOutput (PID, ID , ZWBus.c_str(), &l); //senden eines strings über den bus if (ok==0) { l=16; char* ptrbus = new char[l+1]; ok=IeEnter (PID, ID , ptrbus, &l); //empfangen eines strings über den bus ptrbus[l] = '\0'; if (ok==0) { AnsiString t2=ptrbus; ok=t2.Length(); t2.Delete((l),ok); ok = t2.AnsiPos("="); t2.Delete(1,ok); } delete[] ptrbus; } else return 0.0; try { double f = StrToFloat(t2); return f; } catch(...) { return 0.0; }
-
hey vielen vielen dank!! funktioniert prima musste nur den AnsiSTring t2 noch anders deklaririeren sonst hat er ihn beim übergeben nicht mehr erkannt
!!aber der code ist sehr viel besserr als meiner!!
also vielen dank!!
mfg hans
-
Stimmt, das mit dem t2 hatte ich übersehen.
