Seite 1 von 2

CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 16:46
von DePe
Ich bin beim Versuch von Windows auf Linux umzusteigen, habe also wenig Linux Kenntnisse.
Aktuell verwende ich PureBasic v5.61 x64 mit Debian Strech v9.2.1 amd64 und Xfce v4.12 als Desktop.

Mit dem leicht geänderten Beispielcode aus der Hilfe gibt es einen Speicherzugriffsfehler.
Man kann das Menü nicht mit der Konstante #PB_Any erstellen.
Ist das ein PureBasic-Fehler?

Peter

Code: Alles auswählen

EnableExplicit

Global miWindow.i
Global miMenu.i
Global miEvent.i

Procedure TestHandler()
   Debug "Test menu event"
EndProcedure

Procedure QuitHandler()
   Debug "Quit menu event"
   End
EndProcedure

miWindow = OpenWindow(#PB_Any, 100, 100, 200, 50, "Click test", #PB_Window_SystemMenu)

miMenu = CreateMenu(#PB_Any, WindowID(miWindow)) ; Error when clicking on the menu: "[ERROR] Invalid memory access".
; miMenu = 0 : CreateMenu(miMenu, WindowID(miWindow)) ; OK.
Debug "miMenu = " + miMenu

MenuTitle("File")
MenuItem(0, "Test")
MenuItem(1, "Quit")

BindMenuEvent(miMenu, 0, @TestHandler())
BindMenuEvent(miMenu, 1, @QuitHandler())

Repeat
   miEvent = WaitWindowEvent()
Until miEvent = #PB_Event_CloseWindow

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 17:11
von ts-soft
Ich hab jetzt mal kurz mit PB 5.46 beta 1 getestet, unter XUbuntu. Keine Probleme.
Werde es aber später nochmal mit PB 5.61 testen, im Moment leider keine Möglichkeit.

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 20:00
von ts-soft
So, mit PB 5.61 nochmals getested, unter Linux Mint Cinnamon 18.2

Keine Probleme, funktioniert einwandfrei!

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 20:22
von mk-soft
Kann den Bug unter Ubuntu bestätigen.

X64-System
(VM) Ubuntu 17.10; PB v5.46 (Beate 1); PB v5.45 ; PB v5.60; PB ,5.61

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 20:22
von DePe
Danke für den Test.
Ich habe den Grund für den Fehler gefunden, weiß aber nicht was er bedeutet.
Da die kompilierten Programme vom Dateimanager Thunar nicht gestartet werden können, habe ich im englischen Forum gesucht. Dort gibt es die Lösung mit der Zeile

Code: Alles auswählen

ImportC "-no-pie" : EndImport
Damit startet das Programm aus dem Dateimanager normal und wird auch nicht mehr als Shared Library erkannt. Den Speicherzugrifffehler gibt es damit nicht mehr.
Die zurückgegebene Nummer für miMenu ist jetzt auch sehr viel kleiner:
vorher: miMenu = 93898407024072
jetzt: miMenu = 10751704

Hier ist der Link zum englischen Forum:
PB5.44 - PB 5.51B1 - Compiled program flagged as Shared lib
shared object and how to fix?

Peter

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 21:45
von ts-soft
Okay, wenn es hilft!

Du kannst jetzt entweder auf ein Linux umsteigen, das den Bug nicht hat (z.B. 16.04 LTS) oder immer diese Zeile hinzufügen, weil die stört auch andere Versionen nicht.

PS: Finde es aber traurig, das so ein Bug in Linux (nicht in PB) nach über ein Jahr nicht gefixed wurde!

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 23:15
von DePe
Bin jetzt etwas ratlos, ob ich mit Linux und PureBasic weitermachen soll.
Bei diesem Beispiel aus der Hilfe gibt es ebenfalls Fehler wenn das Menü eine Checkbox hat.

Code: Alles auswählen

If OpenWindow(0, 200, 200, 200, 100, "SetMenuItemState Example")
   If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
      MenuItem(1, "Changed")
      SetMenuItemState(0, 1, 1)    ; set check mark for the previously created menu item
   EndIf
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Bei einem etwas größerem Programm stürtzt die IDE mit einem Speicherzugriffsfehler ab, ebenfalls wegen der Checkbox im Menü. Das kompilierte Programm läuft ohne Fehler weiter.

Peter

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 26.11.2017 23:51
von ts-soft
Warum wechselst Du nicht die Linux-Version? Alles andere funktioniert doch.

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 27.11.2017 10:41
von DePe
Vor einen halben Jahr hatte ich Linux Mint, Ubuntu und OpenSUSE probiert. Leider ist mein PC damit nach ein paar Minuten immer eingefroren. Jetzt habe ich gelesen, dass es wahrscheinlich an der CPU liegt, Intel Celeron J1900, und man einen Kernelparameter angeben kann damit das nicht passiert. Mit dem aktuellen Debian funktionert der PC aber ohne Probleme. Bei einem Wechsel ist also wieder die Frage ob es diesmal funktioniert. Bis ich eine Boot-DVD heruntergeladen habe dauert es einen ganzen Tag.
Also bei dem "Alles andere funktioniert doch." musste ich schmunzeln.

Das mit der Kompileroption PIE und PIC dürfte Absicht sein, und kein Bug. Könnte also auch andere Distributionen betreffen die auf Debian aufbauen. Als Linux-Neuling ist das alles ziemlich schwierig.

Peter

Re: CreateMenu mit #PB_Any Fehler

Verfasst: 27.11.2017 12:45
von mk-soft
Bei mir laufen verscheidene Versionen von Windows und Linux auf Viruell-Machines (Mac Parallels)

Empfehlen kann ich VirtualBox (Oracel)