23.11.2013, 00:05
Das crashed weil der Stringbufer überschrieben wird mit dem Pointer auf den String.
Hätte AB3 richtiges Typechecking würde dir das sofort auffallen.
So wäre das richtig:
[ab3]If ntui_GetAttr{*engine,#TUIA_ID,&*stringP.b}
If *stringP Then engineID.s = Peek.s(*stringP)
EndIf[/ab3]
Das gibt dir aber die ID der engine.
Was du willst ist
[ab3]*mywin.tuiWindow = (.tuiWindow)ntui_GetObjectByID{*engine,"myFunkyWidnow"}
; oder, falls du wirklich nur nach einem Fenster suchst
; oder die instanceID brauchst (hier 1234, falls du mehrere Fenster mit der gleichen ID erzeugst):
*mywin.tuiWindow = ntui_GetWindowByID{*engine,"myFunkyWindow",1234}[/ab3]
... und im XML
Anmerkung:
Die Core Funktionen von NTUI benutzen nie BlitzBasic Strings, sondern ausschliesslich Pointer auf Null-terminierte Character Arrays.
Das ist zwar etwas umstaendlicher, aber kompatibel mit anderen Programmiersprachen wie C.
Fuer die BlitzBasic Anbindung gibt es einige Convenient Stubbs, wie z.B. ntui_GetStringByID. Das ist eigentlich keine NTUI Funktion sondern ein Stubb fuer ntui_GetAttrByID{...,#TUIA_STRING,...}.
Hätte AB3 richtiges Typechecking würde dir das sofort auffallen.
So wäre das richtig:
[ab3]If ntui_GetAttr{*engine,#TUIA_ID,&*stringP.b}
If *stringP Then engineID.s = Peek.s(*stringP)
EndIf[/ab3]
Das gibt dir aber die ID der engine.
Was du willst ist
[ab3]*mywin.tuiWindow = (.tuiWindow)ntui_GetObjectByID{*engine,"myFunkyWidnow"}
; oder, falls du wirklich nur nach einem Fenster suchst
; oder die instanceID brauchst (hier 1234, falls du mehrere Fenster mit der gleichen ID erzeugst):
*mywin.tuiWindow = ntui_GetWindowByID{*engine,"myFunkyWindow",1234}[/ab3]
... und im XML
Code:
<window id="myFunkyWinodw">...</window>
Anmerkung:
Die Core Funktionen von NTUI benutzen nie BlitzBasic Strings, sondern ausschliesslich Pointer auf Null-terminierte Character Arrays.
Das ist zwar etwas umstaendlicher, aber kompatibel mit anderen Programmiersprachen wie C.
Fuer die BlitzBasic Anbindung gibt es einige Convenient Stubbs, wie z.B. ntui_GetStringByID. Das ist eigentlich keine NTUI Funktion sondern ein Stubb fuer ntui_GetAttrByID{...,#TUIA_STRING,...}.