Pointer, mal wieder..

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Moep

Betreff: Pointer, mal wieder..

BeitragMo, Mai 21, 2007 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

hab mal wieder ein problem mit pointern.


Kann es sein , dass BlitzMax keine string Pointer kennt?

Code: [AUSKLAPPEN]
str$="Hallo"
strPtr:String Ptr=VarPtr(str)   '----> illegal pointertype
'--------------------------------------------------------------------'
objPtr:Object Ptr=VarPtr(irgendEinObjekt)   '----------> das selbe



Ich hoffe ihr könnt mir da weiterhelfen.Ich versuche das schon den ganzen Tag zu lösen.

mfg Moep
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de
 

real76

BeitragDi, Mai 22, 2007 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit mir gekannt ist, wurden String Pointer aus Blitzmax entfernt.

Hast Du mal einen einfachen Int Ptr versucht? Die werden auf alle Faelle noch unterstuetzt.

Code: [AUSKLAPPEN]
MyInt:Int=15
MyIntPtr:Int Ptr=VarPtr(MyInt)


Gruss

Moep

BeitragDi, Mai 22, 2007 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 'zahlen'-pointer funzen ja auch(byte,int,float,double).
Aber ich brauch eben ein String Pointer.

Trotzdem Thx

mdg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

BtbN

BeitragDi, Mai 22, 2007 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum willst du nen pointer auf nen String?
Ich glaube, das was du vor hast, kann man auch besser lösen.
Was hast du vor?

Moep

BeitragDi, Mai 22, 2007 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type TVar
   Field v:Int*string* Ptr     ------------------> da will ich nen string pointer
   Field name$
   
   Function Create:TVar(name$,val*$* Var)
      va:TVar=New TVar
      va.name=name
      
      va.v=Varptr(val)
      
      Return va
   End Function
   
   Method Get*$*()
      Return v[0]
   End Method
   
   Method Set(val*$*)
      v[0]=val
   End Method

End Type


mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

BtbN

BeitragDi, Mai 22, 2007 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Was willst du damit erreichen?
Ich sehe dadrin keinerlei sinn.
Und was bedeuten diese *$*?
 

#Reaper

Newsposter

BeitragDi, Mai 22, 2007 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Damit meint er sicherlicht, dass dort die Strings sein sollen
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

BtbN

BeitragDi, Mai 22, 2007 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type TVar
   Field v:String
   Field name:String
   
   Function Create:TVar(name:String,val:String)
      Local va:TVar=New TVar
      va.name=name
       
      va.v = val
       
      Return va
   End Function
   
   Method Get:String()
      Return v
   End Method
   
   Method Set(val:String)
      v = val
   End Method

EndType


Wo ist da jetzt das Problem?

Moep

BeitragDi, Mai 22, 2007 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
v soll sich mit der variable verändern.

Und mit den sternen meine ich , dass ich da strings haben will,funzt ja aber nicht.

Das ganze ist für ne kleine scriptengine.

z.b.

Code: [AUSKLAPPEN]
Local eineVariable$="Hallo"

local ScriptVariable:TVar=TVar.Create("eineVariable",eineVariable)

Print eineVariable '---> ausgabe:Hallo
Print ScriptVariable.Get() '----->ausgabe:Hallo

eineVariable="Tschüss"

Print ScriptVariable.Get() '----->ausgabe:Tschüss

'---------------------und andersrum auch---------------------------

Print eineVariable '---> ausgabe:Hallo
Print ScriptVariable.Get() '----->ausgabe:Hallo

ScriptVariable.Set("Tschüss")

Print eineVariable'----->ausgabe:Tschüss


Ich hoffe ihr versteht einigermaßen was ich will^^.

mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

FOODy

BeitragDi, Mai 22, 2007 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwar etwas umständlich aber so geht das:
(Bei mir zumindest Wink )

Code: [AUSKLAPPEN]
Framework BRL.StandardIO

Type TVar
   Field data:Byte Ptr
   Field name:String
   
   Method Set(value:String)
      MemCopy data,Varptr(value),4
   EndMethod
   
   Method Get:String()
      Local tmp:String
      MemCopy Varptr(tmp),data,4
      Return tmp
   EndMethod
   
   Function Create:TVar(value:String Var)
      Local v:TVar=New TVar
      v.data=Varptr(value)
      Return v
   EndFunction
EndType

Local str:String="Ich bin ein String"
Local vari:TVar=TVar.Create(str)

Print vari.Get()

str="hmmm"

Print vari.Get()

vari.Set("Teeeeest")

Print str



Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB

Moep

BeitragDi, Mai 22, 2007 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Großes danke.

Ich kapier den code zwar im moment nicht aber das wird schon noch Very Happy .





mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

FOODy

BeitragDi, Mai 22, 2007 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe das so:
Da Strings ja im prinzip auch "Types" sind, beinhalten die Variablen die Referenz zur String Instance.
Und diese kopiere ich dann einfach von einer Variable in die andere. Deshalb wird beim "Lesevorgang" eine "tmp" Variable benötigt, da Stringinstancen die Sonderheit haben bei Änderungen (weiß nicht genau ob bei jeder, nehm aber mal an das es nur dann geschieht wenn auf eine Stringinstanz mehr als eine "Speicherstelle" zeigt) sich neuzubilden, sprich eine neue Stringinstanz erzeugen und somit eine neue Referenz bilden.

Ob das nun alles 100%ig korrekt ist weiß ich nicht.
Hab selber ebend aus Neugier nur rumprobiert und diese "Lösung" gefunden.


Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB

Moep

BeitragDi, Mai 22, 2007 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja jetzt versteh ich es einigermaßen.

Ich möchte euch natürlich nicht vorenthalten was ich damit mache.

Durch diese klasse ist es jetzt in meiner ScriptEngine möglich variablen (in der script datei) zu erstellen und vom programm aus darauf zuzugreifen oder vom programm erstellte variablen im script zu benutzen.

Thx Nochmals^^

mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

BtbN

BeitragDi, Mai 22, 2007 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dafür eher eine HashMap verwenden(BRL.Map).
Mit Pointern hab ich in BMax so die erfahrung gemacht, dass in einem von nen paar tausend fällen was schief läuft, und mist bei rum kommt.

Moep

BeitragDi, Mai 22, 2007 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte ich auch vor.

Aber ich hab bei einer TMap keine möglichkeit gefunden die Werte der variablen zu verändern.

mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de
 

Dreamora

BeitragMi, Mai 23, 2007 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Das tut man ja auch nicht, das geht unter worse practise.

Man entfernt den wert und erzeugt in neu in einem managed environment.

Werte eines strings kannst du auch nicht im string selbst ändern, das widerspricht ebenfalls good managed practise.
hackansätze gibt es zwar, wird jedoch davon abgeraten wenn du nicht undebuggbare fehlresultate willst

wenn du ansätze für scriptengines brauchst:

MicroC, Squirrel etc module gibt es, kannst da ja reinschauen.
aber vermutlich wirst du da um pures C nicht herum kommen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Moep

BeitragMi, Mai 23, 2007 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit will ich ja nicht gehen^^.

Ich bin mit dem zu frieden was es bisher kann Very Happy.


mfg MoeP
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group