Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ntui : GetAttrByID
#1
Hallo,

Ich dachte ich komme immer an alle Attribute ran mit dem Befehl ?
Warum liefert mir dann das:
ntui_GetAttrByID{AppContext\tuiEngine,"tncEngine",#TUIEA_AREXXPORT,portname.s}
oder auch bei
ntui_GetAttr{AppContext\tuiEngine,#TUIEA_AREXXPORT,portname.s}
nichts zurück ?


Ps:
Habe gerade gesehen im Befehl ntui_GetAttr{} kann man nicht nach Engineattributen suchen, weil keine enthalten sind.
Gibts dafür einen anderen Befehl außer den internen _ntui_GetEngineAttr{} ?
Zitieren
#2
habs jetzt mal so gelöst:


[ab3]*Engine.tuiEngine = ntui_GetEngine{AppContext\tuiEngine}
portname.s = str_Read{&*Engine\rxPortName}[/ab3]

[ATTACHMENT NOT FOUND]
Zitieren
#3
Du darfst noch auf Felder der Structs zugreifen. ntui_GetEngineAttr ist auch nicht erlaubt, oder ;-) (ist das nicht private?)

Du hast schon recht, man kommt mit ntui_GetAttr an alle Sachen ran, an die man auch ran kommen darf.

In deinem Fall hast du nur Amiblitz überschätzt, dass es versteht dass es einen String kopieren soll. ntui_GetAttr gibt lediglich einen Pointer zurück. In einen amiblitz String musst du das selbst konvertieren. Denke dran, dass ntui, zumindest der core, keine Amiblitz3 eigenheiten benutzt da es auch unter C und anderen Sprachen verwendbar sein soll.

Also:
[ab3]portname.s = "<undefined>"

If ntui_GetAttr{*Engine,#TUIEA_AREXXPORT,&*stringPointer.b}
If *stringPointer Then portname = Peek.s(*stringPointer)
End If[/ab3]


EDIT:
[ab3]*Engine.tuiEngine = ntui_GetEngine{AppContext\tuiEngine}[/ab3]
Das ist zwar erlaubt, aber sinnlos. Wenn AppContext\tuiEngine bereits die tuiEngine ist, warum holst du sie neu?
ntui_GetEngine solltest du auf das erste Object machen dass du erzeugst. Danach verwendest du es überall.
Zitieren
#4
Zitat:ntui_GetEngineAttr ist auch nicht erlaubt, oder (ist das nicht private?)

genau deswegen verwende ich es auch nicht und habe nach einer Alternative gefragt.... Wink

Zitat:Das ist zwar erlaubt, aber sinnlos. Wenn AppContext\tuiEngine bereits die tuiEngine ist, warum holst du sie neu?
weil der Nachfolgende Befehl nur einen Pointer erlaubt, da er mir sonst beim compilieren einen Fehler gibt Chefe Big Grin

Ich probiere das nun aus, und wehe das klappt nicht :mrgreen: :mrgreen: :mrgreen:

Zitat:In deinem Fall hast du nur Amiblitz überschätzt, dass es versteht dass es einen String kopieren soll. ntui_GetAttr gibt lediglich einen Pointer zurück.

Ich habe es ja versucht mit ntui_GetAttr{} aber da bekomme ich soweit ich mich erinnere immer 0 anstatt einen Wert. Aber wie ich oben schrieb probier ich das mal aus
und ich glaube ich weis auch warum das schief ging, weil ich anstatt eines Pointers ein Long benutzt hatte!
Zitieren
#5
Ok, Danke !

Funktioniert !

Wie ich bereits annahm lag es am Pointer...
Zitieren
#6
Dein AppContext\TuiEngine sollte auch ein Pointer auf .tuiEngine sein. Mache dein Programm am besten Syntax 6. Hilft ungemein.
Zitieren
#7
Habs geändert, war wirklich ein Long im Newtype anstatt .tuiEngine
hab auch umgestellt auf syntax 6, war bisher syntax 2.

Danke
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste