Тема: VBS: Подключение обработки событий объекта в классе
Доброго времени суток.
Столкнулся с ситуацией: если процедура обработки событий объекта располагается внутри класса, то при возникновении события обработка не вызывается. Но стоит переместить процедуру за пределы класса, как обработчик начинает вызываться. Ниже "синтетические" примеры - ничего разрушительного, просто смена удалённого каталога(сократил свой код до минимума).
Обработчик событий не вызывается:
Option Explicit
Dim MyClass
Set MyClass = New ClassName
wscript.echo CStr(MyClass.MakeDir("/test"))
Class ClassName
Private INET
Private Sub Class_Initialize
Set INET = WScript.CreateObject("InetCtls.Inet.1", "INET_")
With INET
.Protocol = 2 'icFTP
.URL = "ftp://222.222.222.222"
.UserName = "user"
.Password = "password"
End With
end sub
Public Function MakeDir(path)
INET.Execute , "CD " & path
Do While INET.StillExecuting
wscript.sleep 10
Loop
MakeDir = True
End Function
Private Sub INET_StateChanged(State)'Public тоже пробовал - не спасает
wscript.echo "State = " & State
End Sub
End ClassОбработчик событий отрабатывает:
Option Explicit
Dim MyClass
Set MyClass = New ClassName
wscript.echo CStr(MyClass.MakeDir("/test"))
Sub INET_StateChanged(State)
wscript.echo "State = " & State
End Sub
Class ClassName
Private INET
Private Sub Class_Initialize
Set INET = WScript.CreateObject("InetCtls.Inet.1", "INET_")
With INET
.Protocol = 2 'icFTP
.URL = "ftp://222.222.222.222"
.UserName = "user"
.Password = "password"
End With
end sub
Public Function MakeDir(path)
INET.Execute , "CD " & path
Do While INET.StillExecuting
wscript.sleep 10
Loop
MakeDir = True
End Function
End ClassВариант размещения обработчика снаружи класса мне принципиально не нравится(ибо какой смысл городить класс и вытаскивать из него процедуры и переменные).
В случае с данным объектом это не сильно критично(есть альтернативные пути получить данные об ответе сервера, по крайней мере те что мне требуются на данном этапе
), но с другими объектами такой возможности может и не быть.
Отсюда вопрос: можно ли привязать процедуру обработки событий к объекту внутри класса? Если есть ссылки описывающие работу с классами в VBScript более подробно чем стандартный файл помощи, буду признателен(на MSDN наткнулся практически на копию того что есть в chm-е).

