E R L E D I G T Unterproramm Aufruf aus einer Variablen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

E R L E D I G T Unterproramm Aufruf aus einer Variablen

Beitrag von Pure_Beginner »

Hallo Gemeinde,

habe mal wieder ein schier unlösbares Problem (aus meiner Sicht der Dinge).

In einer Variablen befindet sich der Name eine Procedure die ich aufrufen möchte.

Wie kann ich das bewerkstelligen ?

Für Eure Hilfe wäre ich sehr dankbar.
Zuletzt geändert von Pure_Beginner am 10.08.2012 00:55, insgesamt 1-mal geändert.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Unterproramm Aufruf aus einer Variablen heraus

Beitrag von DrShrek »

Da gibt es mehrere Lösungen.
Versuche es z.B. mal mit einer Map.
Value zeigt dabei auf den Funktionspointer
Für den Key musst Du dir halt was ausdenken z.B.: den Funktionsnamen
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Unterproramm Aufruf aus einer Variablen heraus

Beitrag von Pure_Beginner »

@DrShrek

Danke für Deine schnelle Antwort, bin leider totaler Anfänger und weiß nicht mal was ne MAP ist.

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Unterproramm Aufruf aus einer Variablen heraus

Beitrag von Josh »

Hallo Christian,

was Shrek meint, ist ungefähr so was:

Code: Alles auswählen

Procedure Proc1 ()
  Debug "Procedure1 wurde aufgerufen"
EndProcedure

Procedure Proc2 ()
  Debug "Procedure 2 wurde aufgerufen"
EndProcedure

Procedure Proc3 ()
  Debug "Procedure 3 wurde aufgerufen"
EndProcedure


NewMap Procedures.i()
Define ret.s

Procedures("Proc1") = @Proc1()
Procedures("Proc2") = @Proc2()
Procedures("Proc3") = @Proc3()

ret = InputRequester ("Test", "Geben Sie den Prozedurnamen ein", "Proc1")

CallFunctionFast (Procedures(ret))
Du musst das bereits alles zur Kompilierungszeit vorbereitet haben, da zur Laufzeit die Namen der Prozeduren nicht mehr bekannt sind.

lg
Josh

P.S.: Bin jetzt gespannt, wie lange es dauert, bis mein CallFunctionFast angemeckert wird :mrgreen:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Unterproramm Aufruf aus einer Variablen heraus

Beitrag von STARGÅTE »

Hier mal mit Prototype:

Code: Alles auswählen

; Funktionen definieren

Procedure Plus(A.f, B.f)
  ProcedureReturn A + B
EndProcedure

Procedure Mal(A.f, B.f)
  ProcedureReturn A * B
EndProcedure

Procedure Hoch(A.f, B.f)
  ProcedureReturn Pow(A, B)
EndProcedure


; Prototyp, wie eine Funktion aussieht.
Prototype Function(Wert1.f, Wert2.f)

Global NewMap *Function() ; Liste von Funktionen
*Function("plus") = @Plus()
*Function("mal")  = @Mal()
*Function("hoch") = @Hoch()


; Beispiel 

Procedure.f Berechne(Operation.s, Wert1.f, Wert2.f)
	Protected Function.Function = *Function(LCase(Operation)) ; Funktion finden
	If Function
		ProcedureReturn Function(Wert1, Wert2) ; Funktion aufrufen und Ergebnis zurückgeben
	EndIf
EndProcedure

Debug Berechne("Plus", 2, 3)
Debug Berechne("MAL", 2, 3)
Debug Berechne("hoch", 2, 3)
Debug Berechne("minus", 2, 3)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Unterproramm Aufruf aus einer Variablen heraus

Beitrag von Pure_Beginner »

Hallo zusammen,

besten Dank für eure Tipps,
das ist alles etwas schwierig und ich muss mich erst durchwursteln.

Einstweilen habe ich das ganze mit einer Select Case Anweisung gelöst.

Bestimmt nicht die eleganteste Art und auch nicht die schnellste aber bei meinem Kenntnisstand die Verständlichste.

Nochmals besten Dank und ich bleibe dran.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten