Deeem2031 hat geschrieben:Das was du machen willst geht so nicht. Im fertigen Programm stehen keine Variablen/Proceduren-Namen, somit kann man die dann auch nicht mehr zur Laufzeit rausfinden. Die einzige Möglichkeit das so ähnlich zu machen hat ts-soft schon erwähnt, mit Pointern auf die Proceduren/Variablen.
Eben. PureBasic wird oftmals mit einer Skriptsprache und einem richtigen Compiler verwechselt. PureBasic ist nur ein Übersetzer, der von PureBasicsyntax zu Fasmsyntax übersetzt(FASM ist daher der eigentliche/richtige Compiler). Und in der fertigen Datei stehen dann keine Funktionsnamen mehr oder so, da steht dann nur der fertige code, der so aussieht wie unlesbares ASM, bei dem namen nicht existieren, bzw. nur als kleine bytecodes rumschwirren.
[EDIT]
Natürlich kann man aber sowas machen:
Code: Alles auswählen
Structure Procedures
Name.s
Addr.l
EndStructure
NewList Proc.Procedures()
Procedure CallProcByName(Proc.s)
ForEach Proc()
If Proc()\Name = Proc And Proc()\Addr
ProcedureReturn CallFunctionFast(Proc()\Addr)
EndIf
Next
EndProcedure
Procedure MyProc1()
Debug "MyProc1 wurde aufgerufen"
EndProcedure
Procedure MyProc2()
Debug "MyProc2 wurde aufgerufen"
EndProcedure
AddElement(Proc()) : Proc()\Name = "MyProc1" : Proc()\Addr = @MyProc1()
AddElement(Proc()) : Proc()\Name = "MyProc2" : Proc()\Addr = @MyProc2()
CallProcByName("MyProc1")
Delay(100)
CallProcByName("MyProc2")