Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / VBScript, возможность динамического изменения кода / 4 сообщений из 4, страница 1 из 1
15.01.2014, 15:03
    #38527063
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript, возможность динамического изменения кода
Добрый день!

В общем, возник такой вопрос, можно ли в VBScript, крутящемся на WSH, динамически дописывать код, например ещё одну функцию. Есть Execute, но это не совсем то, работает только один раз на вызове внутри зоны видимости, где этот Execute был вызван. Хочется чтобы можно было прям код в хосте править(т.е. по запуску, например, файла vbs он грузится в процесс WSH, и хочется написать такой код, который бы сам себя правил).
В браузере можно было бы написать:
Код: html
1.
2.
document.write("<script language='VBScript'>")
...


и это вроде работает (хотя какие-то глюки возникают при закрытии блока скрипта... но пока это не важно)
а без браузера как это можно сделать?
...
Рейтинг: 0 / 0
15.01.2014, 16:11
    #38527180
Малыхин Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript, возможность динамического изменения кода
eval
...
Рейтинг: 0 / 0
15.01.2014, 16:13
    #38527184
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript, возможность динамического изменения кода
Можно сказать, что "VBScript, крутящийся на WSH", крутится в результате одноразового запуска Execute. Чтобы изменить код, нужно остановить исполнение. На VBS можно разве что создавать новые экземпляры WSH со своим собственным контекстом, и исполнять в них куски кода. Впрочем, добавлять любые объекты в контекст экземпляра WSH можно совершенно невозбранно.

Не прерывая исполнения сам себя модифицировать может JSсript. Например, можно сгенерировать/получить извне текст процедуры, сделать ее новым методом существующего объекта и выполнить. VBS так не умеет.
...
Рейтинг: 0 / 0
22.01.2014, 01:52
    #38533858
omegastripes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript, возможность динамического изменения кода
CEMb... работает только один раз на вызове внутри зоны видимости, где этот Execute был вызван. ...
Используйте
Код: vbnet
1.
executeglobal


Antonariy... VBS так не умеет.
Следует заметить некоторые скудные возможности VBS в плане изменения "самого себя".

Подмена функции или процедуры из самой себя, или из другой, или из глобального контекста скрипта (с классами это не сработает - возможно лишь динамически добавить новый класс, но не заменить существующий):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
message
message

sub message
	msgbox "исходное значение"
	executeglobal "sub message: msgbox ""новый код"": end sub"
end sub


Присвоение определенному имени разных функций или процедур:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set proc = getref("message1")
proc
set proc = getref("message2")
proc

sub message1
	msgbox "значение 1"
end sub

sub message2
	msgbox "значение 2"
end sub


Аналогично, присвоение объявленной внутри класса переменной разных функций или процедур (с уже объявленными методами / свойствами класса не сработает):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set box = new element
set box.special = getref("message")
box.special

sub message
	msgbox "значение"
end sub

class element
	public special
end class


Вероятно, эта информация пригодится.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / VBScript, возможность динамического изменения кода / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]