>通りすがりさん
ありがとうございます。難しそうですがやってみます。
>SYAMさん
ありがとうございます。
たとえば↓のような感じでしょうか(今作っているプログラムとは違います)
変わらないか少し遅くなっているようなんですが、私の解釈が間違っているのでしょうか?
#uselib "kernel32"
#func QueryPFreq "QueryPerformanceFrequency" var
#func QueryPCount "QueryPerformanceCounter" var
dim lgint, 4
#define _start QueryPFreq nFreq : QueryPCount nBefore
#define _goal QueryPCount lgint(2) : dwTime = strf("%%.3fmSec", 1000.*(lgint(2)-nBefore)/nFreq)
#module
// DrawCircle 位置X, 位置Y, 半径
#deffunc DrawCircle double mx, double my, double r
sx = mx - r
sy = my - r
dx = mx + r
dy = my + r
x = sx
y = sy
repeat
repeat
if x > dx : break
// 中心から何ピクセルはなれているか
dis = sqrt( (x-mx)*(x-mx) + (y-my)*(y-my) )
// ↓↓↓ ここ ↓↓↓
;if dis <= r {
if (dis*dis) <= (r*r) {
pset x, y
}
x++
loop
if y > dy : break
x = sx : y++
loop
return
#global
_start
DrawCircle 100, 100, 100
_goal
dialog dwTime
end
-----------------------------
あとはマシン語で小数の計算ができれば何とかなりそうなのですが、なかなか難しいです。
http://hsp.tv/play/pforum.php?mode=all&num=22638
↑でのYOYOさんの小数の戻り値を取得するモジュールを改良してどうにかならないかと研究中です。
YOYOさんのモジュールはDLLの関数用でcallfuncには対応していないみたいです。
以下YOYOさんの書き込み
YOYO
2007/7/27(Fri) 01:28:25|NO.9784
整数と小数では返り値を渡す仕組みが異なるのでプラグインかマシン語で取り出す仕組みが必要です。
強引ですが、関数の返した小数を取り出すモジュールを作ってみました。
関数が返す少数はdoubleとfloatどちらでも大丈夫です。
#module
#uselib "kernel32.dll"
#func VirtualProtect "VirtualProtect" int, int, int, int
#deffunc getdouble
if code == 0 {
code=$0424448b,$04c218dd,$00000000
VirtualProtect varptr(code), length(code)*4, $40, varptr(res)
fret=0.0
}
prm = varptr(fret)
res = callfunc(prm, varptr(code), 1)
return fret
#global
BASS_ChannelBytes2Seconds handle,pos
getdouble //getdoubleは小数を返す命令の直後に呼び出してください。
mes refdval