Seite 1 von 1

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

Verfasst: 09.08.2012 12:45
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.

Re: Unterproramm Aufruf aus einer Variablen heraus

Verfasst: 09.08.2012 12:47
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

Re: Unterproramm Aufruf aus einer Variablen heraus

Verfasst: 09.08.2012 12:51
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

Re: Unterproramm Aufruf aus einer Variablen heraus

Verfasst: 09.08.2012 13:21
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:

Re: Unterproramm Aufruf aus einer Variablen heraus

Verfasst: 09.08.2012 14:28
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)

Re: Unterproramm Aufruf aus einer Variablen heraus

Verfasst: 09.08.2012 23:28
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.