横から失礼します。
>code=$0424448b,$04c218dd,$00000000
7-9byteめの C20400(LE) は自前でスタックを戻すコードですが、個人的にはc3としたいです。
#module
#uselib "kernel32.dll"
#func VirtualProtect "VirtualProtect" int,int,int,int
#deffunc _INITCODE_
code = $000000b8,$c318dd00,$000000b8,$c318d900
VirtualProtect varptr(code), length(code)*4, $40, varptr(res)
dret = 0.0 : fret = 0.0
return
; double型で戻り値を得る
#defcfunc GetDST
lpoke code, 1, varptr(dret) : res = callfunc(res, varptr(code), 0)
return dret
; float型で戻り値を得る
#defcfunc GetFST
lpoke code, 9, varptr(fret) : res = callfunc(res, varptr(code)+8, 0)
return fret
; ----------------------------
; test func
; ----------------------------
#deffunc SetST var dv; double
test = $000000b8,$c300dd00:VirtualProtect varptr(test), length(test)*4, $40, varptr(res)
lpoke test, 1, varptr(dv) :res = callfunc(res, varptr(test), 0)
return
; ----------------------------
#global
_INITCODE_
d = 10.0 : SetST d : mes GetDST()
; BASS_ChannelBytes2Seconds handle,pos
; mes GetDST()