Funktions- und Prozedurzeiger
In OWBasic können globale Variablen deklariert werden, die auf Funktionen oder Prozeduren zeigen.
Bevor er verwendet werden kann, muß der Typ des Funktionszeigers zunächst deklariert werden:
FPTR <typename>=(PROC <paramlist>)
FPTR <typename>=(FUNC<return type> <paramlist>) |
<paramlist> gibt die Parameter der Prozedur/Funktion an und hat folgenden Aufbau:
[VAR] <dummy variable> [[]], ... |
Ein Funktionszeiger ist eine gewöhnliche Variable; dementsprechend muß er nicht deklariert (was aber mit LOCAL durchaus möglich ist), sondern kann einfach verwendet werden:
<varname>\<typename>=#NULL |
Einem Funktionszeiger kann man einen Wert auf die gleiche Weise wie bei anderen Variablen zuweisen; die Adresse einer Prozedur läßt sich über
, die einer Funktion über
abfragen.
Man kann einem Funktionszeiger auch den symbolischen Wert #NULL zuweisen und ihn in Integer konvertieren, um ihn darauf abzufragen. Dies ist sinnvoll bei optionalen Callback-Funktionen, die nur aufgerufen werden sollen, wenn sie auf etwas zeigen.
Aufgerufen wird ein Funktionszeiger durch die Direktive CALL:
CALL <procptrname> <parameters>
CALL <type suffix> (<funcptrname> <parameters>) |
Beispiel:
FPTR myproc_t=(PROC)
FPTR myfunc_t=(FUNC$ i%)
DIM screeninit\myproc_t[0]
DIM bname\myfunc_t[0]
PROC drawscreen
IF INT(screeninit)<>0 THEN
CALL screeninit
ENDIF
TEXTBOX CALL$(bname RND(2)),10,30,149,40,0
ENDP
FUNC name$ n
RETURN "Nr. "+STRING(n)
PROC init
CLS 2
BOX 0,0,159,159
ENDP
screeninit=PROC(init)
bname=FUNC(name$)
drawscreen |
|