CallBACK
Omschrijving:
Callback is het adres van een programma functie die als parameter in een API call
wordt gebruikt. De syntaxis is:
callback addressPTR, functionName(type1, type2...), returnValue
(Noteer: Een CALLBACK is een zeer moderne programmering techniek. Zij moeten alleen
door programmeurs met een goede werkingskennis gebruikt worden bij het aanroepen
van API functies met CALLDLL.)
Een CALLBACK commando zet een geheugenadres op voor de functie op die in het bevel
wordt gespecificeerd. Een API functie kan dit adres dan gebruiken om de
gespecificeerde functie te roepen vaak, vandaar de term CALLBACK.
De meeste API functies worden eenmalig geroepen, en terugkeren met één enkele waarde terug.
Een CALLBACK functie staat vaak met het programma in wisselwerking.
De parameters worden meer in detail hieronder verklaard.
Gebruik:
addressPTR
Deze parameter wijst een naam aan het geheugenadres toe van de functie.
Deze naam wordt gebruikt in de API call die het geheugenadres vereist.
functionName
Deze parameter is de naam van de functie in het Liberty BASIC programma dat
door de API functie werd aangeroepen.
(type1, type2...)
Het CALLBACK statement vereist een door komma's gescheiden lijst van parameters
die specifiek is voor de gebruikte functie. De meeste Windows API referenties
bevatten documentatie over de bijzondere beschikbare functies.
De parameters moeten geldige gegevens TYPES zoals "ulong" en "long" zijn.
returnValue
Het TYPE van de terugkeerwaarde is vermeld na het sluitende haakje.
De functie van de Liberty BASIC kan een waarde naar de roepende functie terugsturen.
In de volgende demo, houdt de functie van de Liberty BASIC een interne telling bij,
en keert met 1 terug als het informatie blijft verwerken en 0 wanneer het controle
aan de roepende functie overdraagt. Het print de namen van de eerste 5 vensters
die worden verzonden door de EnumWindows API, dan geeft het de controle terug
aan de roepende functie.
texteditor #win.te, 10, 10, 250, 250
open "Enum Windows Example" for window as #win
print #win, "trapclose [quit]"
'set the variable named address to be the memory address for
'enumWndProc() using TYPES handle and ulong, and set
'the return TYPE of enumWndProc() to be a boolean
callback address, enumWndProc(handle, ulong), boolean
'call EnumWindows, which in turn calls back into the
'BASIC function at address.
calldll #user32, "EnumWindows", _
address as ulong, _
0 as long, _
result as boolean
wait
[quit]
close #win
end
function enumWndProc(hwnd, lparam)
labelBuffer$ = space$(71)
calldll #user32, "GetWindowTextA", _
hwnd as ulong, _
labelBuffer$ as ptr, _
70 as long, _
result as long
if left$(labelBuffer$, 1) <> chr$(0) then
print #win.te, labelBuffer$
call setCount getCount()+1
end if
if getCount() = 5 then
enumWndProc = 0 'returning 0 causes EnumWindows to return
else
enumWndProc = 1
end if
end function
sub setCount value
count(0) = value
end sub
function getCount()
getCount = count(0)
end function