VBScript: "Stack overflow at line: 0"
От: Shrike Россия  
Дата: 28.10.04 16:49
Оценка:
Коллеги,
кто-нибудь сталкивался со следующей проблемой?

Создаем 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
Re: VBScript: "Stack overflow at line: 0"
От: Spidola Россия http://www.usametrics.ru
Дата: 28.10.04 20:48
Оценка:
Здравствуйте, 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
Re[2]: VBScript: "Stack overflow at line: 0"
От: Shrike Россия  
Дата: 29.10.04 07:54
Оценка:
Здравствуйте, 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 вызове.
Shrike
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.