TextGadget auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
exit
Beiträge: 36
Registriert: 24.03.2008 12:17
Computerausstattung: - Windows 10
- PureBasic 5.62

Beitrag 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]
- Windows 10
- PureBasic 5.62
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
exit
Beiträge: 36
Registriert: 24.03.2008 12:17
Computerausstattung: - Windows 10
- PureBasic 5.62

Beitrag 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.
- Windows 10
- PureBasic 5.62
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten