powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / VBScript, возможность динамического изменения кода
4 сообщений из 4, страница 1 из 1
VBScript, возможность динамического изменения кода
    #38527063
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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


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

Не прерывая исполнения сам себя модифицировать может JSсript. Например, можно сгенерировать/получить извне текст процедуры, сделать ее новым методом существующего объекта и выполнить. VBS так не умеет.
...
Рейтинг: 0 / 0
VBScript, возможность динамического изменения кода
    #38533858
omegastripes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
4 сообщений из 4, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / VBScript, возможность динамического изменения кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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