Seite 1 von 1

Procedure als Parameter

Verfasst: 19.01.2018 15:11
von Skiller
Hallo Folks,

Zwecks Alt-Kunden Betreuung, wollte ich einige VFP9-Funktionen nach PB übertragen. Ich hatte schon einmal eine ähnliche Frage gestellt; war aber nicht deutlich genug erklärt. Daher an dieser Stelle noch einmal mit zwei Fragen:

1. In VFP ist folgendes möglich:

Code: Alles auswählen

    ;Macrosyntax
    x = "Fox"
    ? "&x.Pro"
    
    Ausgabe: FoxPro
Beispiel: FoxPro

Code: Alles auswählen

_Standard_Func(3,'My_Func_1("A")')
_Standard_Func(5,'My_Func_2("B",i)')

Procedure _Standard_Func(x, My_Func)
  LOCAL i
  For i = 1 To x
    &My_Func  ;Macro 
  Next
EndProc

Procedure My_Func_1(cVal)
  ?  cVal
EndProc

Procedure My_Func_2(cVal, nVal)
  ?  cVal, nVal
ENDPROC


Ausgabe: A A A   B1 B2 B3 B4 B5
Ist das in PB übertragbar?

2.) Weiss jemand wie ich eine VFP9.DLL in PB einbinden kann?

Besten DANK!! :)

Re: Procedure als Parameter

Verfasst: 19.01.2018 15:44
von Kiffi
Skiller hat geschrieben:Ist das in PB übertragbar?
ja, ist es. Schau Dir hierfür die Runtime-Funktionen an.

Grüße ... Peter

Re: Procedure als Parameter

Verfasst: 19.01.2018 16:28
von NicTheQuick
Also wenn das 1:1 so übertragbar ist, dann staune ich Bauklötze. Lambda-Funktionen kann Purebasic meines Wissens nach nämlich nicht.

Re: Procedure als Parameter

Verfasst: 19.01.2018 19:34
von Andesdaf
du kannst zwar eine Procedure als Text übergeben, aber nicht deren Parameter.

Viel mehr als Folgendes ist nicht möglich:

Code: Alles auswählen

EnableExplicit

Prototype.i My_Func(cVal.s, nVal.i)

Runtime Procedure My_Func_1(cVal.s, nVal.i)
  Debug cVal
EndProcedure

Runtime Procedure My_Func_2(cVal.s, nVal.i)
  Debug cVal + Str(nVal)
EndProcedure

Procedure _Standard_Func(x.i, My_Func.s)
  Protected Func.My_Func
  Protected.i i
  
  Func = GetRuntimeInteger(My_Func)
  
  For i = 1 To x
    Func("A", i)
  Next i
  
EndProcedure

_Standard_Func(3, "My_Func_1()")
_Standard_Func(5, "My_Func_2()")

Re: Procedure als Parameter

Verfasst: 21.01.2018 05:51
von Skiller
Sorry für die Verspätung. DANKE!! :)