CallBack wie ging das?

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

Midimaster

Betreff: CallBack wie ging das?

BeitragMi, Dez 15, 2021 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte eine Function in einem Type dazu bringen eine andere Function außerhalb des Types als Callback aufzurufen.

so kann es jeder:
BlitzMax: [AUSKLAPPEN]
TMyLib.MachErstDas()

Type TMyLib
Function MachErstDas()
' tu alles mögliche
MyCallBack()
End Function
End Type

Function MyCallBack()
Print "Mach Erst Das ist fertig"
End Function



Nun soll aber der Name der CallBack-Function frei wählbar sein

BlitzMax: [AUSKLAPPEN]
TMyLib.MachErstDas(AndererName)

Type TMyLib
Function MachErstDas(CallBack:Byte Ptr)
' tu alles mögliche
CallBack()
End Function
End Type

Function AndererName()
Print "Mach Erst Das ist fertig"
End Function



wie ging das nochmal?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

CO2

ehemals "SirMO"

BeitragMi, Dez 15, 2021 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend,

so müsste es klappen BlitzMax: [AUSKLAPPEN]
Type TTest123
Field Callback(digit:Int)
End Type


Local obj:TTest123 = New TTest123
obj.Callback = PrintHelloWorld
obj.Callback(5)


Function PrintHelloWorld(digit:Int)
Print "Hello, World" + digit
End Function


Als Typ des Feldes wird sozusagen die Funktiondefinition gewählt - also in den Klammern sind die erwarteten Parameter und zusätzlich kannst Du noch einen Return-Typ angeben, indem Du z.B. BlitzMax: [AUSKLAPPEN]
Field Callback:Int(digit:Int)
schreibst.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Midimaster

BeitragDo, Dez 16, 2021 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir CO2, dein Code hat mir weitergeholfen.

Es ist tatsächlich nötig, den CallBack als Field oder als Global innerhalb des Types zu definieren. Über diesen Umweg wird der Byte Ptr plötzlich als Funktions-Ruf erkannt.

Ich habe es nun etwas anders gemacht als Dein Vorschlag war weil das ist näher an dem was ich brauche:

BlitzMax: [AUSKLAPPEN]
Test.Register MyCallBack
Test.DoItNow

Type Test
Global CallBack(N:Int)
Function Register(CallBackName:Byte Ptr)
CallBack = CallBackName
End Function
Function DoItNow()
CallBack 5
End Function
End Type

Function MyCallBack(i%)
Print "hello" + i
End Function


Und es funktioniert auch ohne Parameter:

BlitzMax: [AUSKLAPPEN]
Test.Register MyCallBack
Test.DoItNow

Type Test
Global CallBack()
Function Register(CallBackName:Byte Ptr)
CallBack = CallBackName
End Function

Function DoItNow()
CallBack
End Function
End Type

Function MyCallBack()
Print "hello"
End Function


Herzlichen Dank nochmals.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group