Всем привет, в данной статье мы подробно изучим работу с внешними объектами в vbscript сценариях и научимся создавать собственные классы. Для начала, давайте по порядку. Под объектом мы будем рассматривать некую библиотеку (в большинстве случаев это внешний файл с расширением dll), которая содержит методы и свойства для выполнения тех или иных задач (работа с файловой системой, создание форм и так далее).
Классы – это тоже своеобразные vbscript объекты, но, они немного отличаются от тех объектов, какие мы создавали на языке jscript, далее, по ходу статьи я покажу, в чем заключаются различия.
И так, давайте для начала рассмотрим, как происходит подключение в vbscript внешних объектов. Для этого используются две функции:
CreateObject( servername.typename[, location ] ) — Создаёт экземпляр объекта-сервера автоматизации и возвращает ссылку на него. Здесь servername — имя приложения, являющегося сервером; typename — тип или класс; location — сетевое имя компьютера.
В большинстве случае, достаточно указать только servername.typename, например:
Dim FSO, WSO Set FSO = CreateObject("Scripting.FileSystemObject") Set WSO = CreateObject("Scripting.WindowSystemObject") |
Как видим, сначала нужно объявить переменную, далее мы используем ключевое слово Set после которого следует наша переменная. После того, как мы создали ссылку на нужный объект в vbscript сценарии, к нему можно будет обратиться уже через имя переменной.
GetObject([pathname] [, classname] ) — Возвращает ссылку на объект класса classname, который хранится в отдельном файле, путь к которому задает параметр pathname.
Как правило, данная функция, используется при работе с Windows Management Instrumentation:
Dim objService Set objService = GetObject("WinMgmts:\\.\Root\CIMV2") |
Тут мы подключаемся к пространству имен CIMV2.
В какой-то момент, может отпасть надобность использовать vbscript объекты, что бы освободить на них ссылку, используется ключевое слово Nothing:
Set FSO = Nothing Set WSO = Nothing Set objService = Nothing |
Хорошо, но вы, возможно скажете, а нельзя ли определить собственные объекты vbscript в теле сценария? Конечно можно, только называться они будут классами. Общий синтаксис при создании класса vbs таков:
Class <имя>
Методы и свойства
End Class
Как видим, всё в принципе просто, хорошо, давайте создадим свой первый класс (объект) vbscript:
'**************************************** ' Простой (класс) объект vbscript ' class.vbs '**************************************** dim my_class ' Создаём класс new_class Class new_class Dim my_arr(3), a,b Function my_fun(x,y) my_fun=x+y End Function End Class ' создаём ссылку на экземпляр vbs класса new_class set my_class = new new_class 'Заполняем свойства my_class.my_arr(0) = 10 my_class.my_arr(1) = "строка" my_class.my_arr(2) = #10/10/2000# my_class.my_arr(3) = 1.32 my_class.a = 200 my_class.b = 500 MsgBox my_class.my_arr(2) MsgBox my_class.my_fun(10,100) |
Тут мы сначала создали объект my_class, в нём мы прописали одну функцию, две переменные и один массив. Далее, мы создали ссылку на наш объект vbscript через переменную new_class. Фактически, теперь мы взаимодействуем не с самим классом, а с его копией. Что бы не писать лишние строки кода при заполнении свойств, можно прибегнуть к помощи одной конструкции.
With … End With — Позволяет обращаться к свойствам объекта vbscript без написания его имени, например:
with my_class .my_arr(0) = 10 .my_arr(1) = "строка" .my_arr(2) = #10/10/2000# .my_arr(3) = 1.32 ............................................... .a = 200 .b = 500 end with |
Давайте далее, для членов классов vbs в языке vbscript есть следующие ключевые слова:
Private – видимость только внутри кода для заданного класса vbs.
Public – доступность как внутри, так и снаружи (значение присуще по умолчанию).
Также, если переменной нужно присвоить значения сразу в теле класса, то можно использовать функцию Property Get, её синтаксис следующий:
Property Get имя переменной
Имя переменной=значение
End Property
Хотя по правде, есть и другие функции, однако, если их сейчас описывать, то это лишь запутает ситуацию, поэтому, давайте пока посмотрим на следующий пример:
'**************************************** ' Пример простого vbs класса ' class_1.vbs '**************************************** dim my_class ' Создаём класс new_class Class new_class ' глобальная видимость dim a ' Локальная видимость Private b ' только чтение Property Get c c=100 End Property Function my_fun(x,y) my_fun=x+y End Function End Class ' создаём ссылку на экземпляр vbs класса new_class set my_class = new new_class ' Возникнет ошибка MsgBox my_class.b 'Заполняем свойства with my_class .a = 200 ' Возникнет ошибка .b = 500 ' Возникнет ошибка .c = 300 end with MsgBox my_class.c |
Данный пример демонстрирует, как ведут себя те или иные ключевые слова или функции в теле vbscript объекта (класса). Данная статья была лишь кратким знакомством с классами и объектами языка vbscript.