- Сообщения
- 8,673
- Репутация
- 2,484
Пример:
Скрипт валится если использовать __TCPInet_KillTimer из функции вызова (test()).
Проверено на версий 3.3.10.2.
Я понимаю что не совсем правильно закрывать callback из него самого же, но всё таки, я думаю скрипт не должен падать...
С AdlibRegister такого не происходит:
Код:
$hTimer = __TCPInet_SetTimer('test')
Sleep(1000)
Func test($hWnd, $iMsg, $iIDTimer, $dwTime)
ConsoleWrite($iIDTimer & @LF)
__TCPInet_KillTimer($hTimer, $iIDTimer)
EndFunc
Func __TCPInet_SetTimer($sTimerFunc, $iElapse = 250)
Local $hCallBack = 0, $pTimerFunc = 0, $aResult
$hCallBack = DllCallbackRegister($sTimerFunc, 'none', 'hwnd;int;uint_ptr;dword')
$pTimerFunc = DllCallbackGetPtr($hCallBack)
If $hCallBack = 0 Or $pTimerFunc = 0 Then
Return SetError(-1, -1, 0)
EndIf
$aResult = DllCall('user32.dll', 'uint_ptr', 'SetTimer', 'hwnd', 0, 'uint_ptr', 1001, 'uint', $iElapse, 'ptr', $pTimerFunc)
If @error Or $aResult[0] = 0 Then
DllCallbackFree($hCallBack)
Return SetError(@error, @extended, 0)
EndIf
Return $hCallBack
EndFunc
Func __TCPInet_KillTimer($hTimer, $iIDTimer)
DllCall('user32.dll', 'bool', 'KillTimer', 'hwnd', 0, 'uint_ptr', $iIDTimer)
DllCallbackFree($hTimer) ;Причина падения
EndFunc
Скрипт валится если использовать __TCPInet_KillTimer из функции вызова (test()).
Проверено на версий 3.3.10.2.
Я понимаю что не совсем правильно закрывать callback из него самого же, но всё таки, я думаю скрипт не должен падать...
С AdlibRegister такого не происходит:
Код:
AdlibRegister('test')
Sleep(1000)
Func test()
Local Static $iCall = 0
$iCall += 1
ConsoleWrite('Call #' & $iCall & @LF)
AdlibUnRegister('test')
EndFunc