Seite 3 von 3

Verfasst: 30.10.2008 18:38
von exit
Und die Suche geht weiter! Folgendes habe ich inzwischen herausgefunden:
===================================================
1. Der Fehler von gestern abend (siehe oben weiter) lässt sich vermeiden, wenn vorher in das TextGadget etwas hineingeschrieben wird. Führt es zu Fehlern wenn man leere TextGadgets ausliest?

funktioniert, ist aber nicht das was ich möchte:
SetGadgetText(#scanner_rohdaten, "muss hier etwas stehen?")

funktioniert nicht, ich möchte aber ein leeres Gadget haben
SetGadgetText(#scanner_rohdaten, "")
===================================================
2. Wie bekomme ich laenge.s in laenge$ kopiert bzw gewandelt? Siehe im Code unten
===================================================
3. Was komischerweise bleibt, wenn auch an anderer Stelle, sind diese "invalid memory access" Fehler. In Line 310 mag es sein, dass ich mit dem "laengenstring$ = laenge.s" einen Fehler habe.

Wenn Ihr mir zu diesen 3 Punkten etwas helfen könntet ...? Wäre nett !


Code: Alles auswählen

If Ergebnis > 0                                     ;dann Daten auslesen
  laenge.s = ""                                     ;Längenstring leeren
  ReadSerialPortData(ComPort_Nr, @laenge,14)        ;akt. Länge (14 byte) aus dem Zähler auslesen
  
  laengenstring$ = laenge.s ;<<<<<<<<<< Line 310 <<<<<<<<<<<<<<<
  ;laenge$ = Mid(laenge.s, 6,5)

  
  SetGadgetText(#akt_Laenge, laenge$) 

EndIf


;Fehlerbericht
;[17:20:16] Warte auf den Start des Executable...
;[17:20:16] Executable gestartet.
;[17:20:16] [ERROR] LaengenControl_2.pb (Line: 310)
;[17:20:16] [ERROR] Invalid memory access. (Read error at address 3992253)
;[17:20:35] Das Programm wurde beendet.

[/code]

Verfasst: 30.10.2008 18:42
von ts-soft
laenge.s ist doch leer, da kannste doch nichts reinschreiben. Kein Wunder

Code: Alles auswählen

laenge.s = Space(14)
sollte helfen, bevor Du die Adresse als Buffer nutzt!

Verfasst: 30.10.2008 18:44
von Kaeru Gaman
exit hat geschrieben:funktioniert nicht, ich möchte aber ein leeres Gadget haben
SetGadgetText(#scanner_rohdaten, "")
MUSS funktionieren. wenn nicht verwurschtelt die komische LIB die du benutzt irgendwas, oder deine Installation ist fehlerhaft.

Verfasst: 30.10.2008 19:45
von exit
:allright: TÄRÄÄÄÄ (sollte ne Fanfare sein)

Vielen Dank Jungs es funktioniert alles wieder seitdem ich

Code: Alles auswählen

laenge.s = Space(14)
richtig eingegeben habe. Habt ihr eine Erklärung?

aktueller Code:

Code: Alles auswählen

Ergebnis = AvailableSerialPortInput(ComPort_Nr)     ;liegen Daten vor?
If Ergebnis > 0                                     ;dann Daten auslesen
  laenge.s =  Space(14)                             ;Längenstring erstellen
  ReadSerialPortData(ComPort_Nr, @laenge,14)        ;akt. Länge (14 byte) aus dem Zähler auslesen
  
  laengenstring$ = laenge.s 
  laenge$ = Mid(laengenstring$, 8,5)

  SetGadgetText(#akt_Laenge, laenge$) 

EndIf
Vielen Dank erstmal, ich werde mir gleich auf einem Geburtstag erstmal eine Gerstenkaltschale (Bier) gönnen und morgen mit meiner Inbetriebnahme weitermachen.

Verfasst: 30.10.2008 20:02
von ts-soft
> Habt ihr eine Erklärung?

Code: Alles auswählen

ReadSerialPortData(#SerialPort, *Puffer, Laenge)
erwartet einen Puffer, Buffer, Memory oder wie auch immer, da kannste
nicht einfach die Adresse eines leeren Strings angeben.
Normallerweise nimmt man dafür AllocateMemory, aber bei so kleinen
Puffern tuts auch ein String, der genügend Platz bietet, die Daten
aufzunehmen.