Коллеги,
кто-нибудь сталкивался со следующей проблемой?
Создаем html файл следующего содержания:
<html>
<script language="VBScript">
dim nCount
nCount = 0
Class Test
Sub Ping(a)
nCount = nCount + 1
if nCount > 15 then exit sub
Me.Ping a
End Sub
End Class
Sub window_onLoad
on error resume next
Set o = New Test
o.Ping "a"
MsgBox nCount & vbCr & Err.Description
End Sub
</script>
</html>
После завершения выполнения скрипта, IE выдает:
"Stack overflow at line: 0"
Причем стек разворачивается обратно. Никакой ошибки VBS-runtime не возникает.
Смысл здесь в вызове методов объектов.Рекурсия непричем. Можно сделать последовательные вызовы разных методов, это не играет роли. Вызовы window.имя_глобальной_функции приводят к тому же.
Попробовали даже так извратиться:
<HTML>
<HEAD>
<SCRIPT LANGUAGE="VBScript">
Option explicit
dim oVBS
Sub IinitializeVbsEngine()
set oVBS = createObject("MSScriptControl.ScriptControl")
oVBS.Language = "VBScript"
oVBS.AddObject "window", window, true
End sub
Class Test
public nCount
function Ping(a)
nCount = nCount + 1
if nCount > 15 then
exit function
end if
Me.Ping a
End function
End Class
Sub Window_OnLoad()
MsgBox "Start"
IinitializeVbsEngine
oVBS.AddObject "Test", new Test, true
oVBS.ExecuteStatement "Ping 10"
End sub
</SCRIPT>
</HEAD>
Результат тот же!
Здравствуйте, Shrike, Вы писали:
S>Коллеги,
S>кто-нибудь сталкивался со следующей проблемой?
До этого момента нет
S>Class Test
S> Sub Ping(a)
S> nCount = nCount + 1
S> if nCount > 15 then exit sub
S> Me.Ping a
S> End Sub
S>End Class
Уберите
Me. Должно полегчать.
... << RSDN@Home 1.1.4 @@subversion >> Home
Здравствуйте, Spidola, Вы писали:
S>Здравствуйте, Shrike, Вы писали:
S>>Коллеги,
S>>кто-нибудь сталкивался со следующей проблемой?
S>До этого момента нет
S>S>>Class Test
S>> Sub Ping(a)
S>> nCount = nCount + 1
S>> if nCount > 15 then exit sub
S>> Me.Ping a
S>> End Sub
S>>End Class
S>
S>Уберите Me. Должно полегчать.
Это и так понятно. Нельзя убрать. Надо пользоваться классами.
FYI:
Если пользоваться глобальными функциями/процедурами, и не вызывать их через window.имя_процедуры, то данной ошибки никогда не будет.
Она возникает именно при вызове 15 методов класса. Причем, документированная ошибка VBScript "Out of stack space" возникает сильно позже — на 96 вызове.