Замена части кода по-ходу выполнения приложения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Death666
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 17.12.2006 (Вс) 2:19
Откуда: Минск

Замена части кода по-ходу выполнения приложения

Сообщение Death666 » 17.12.2006 (Вс) 2:49

Приветствую всех!
В общем, у меня возник вопрос, сейчас постараюсь по-понятней объяснить проблему: как можно изменять код программы по желанию пользователя при работе с самостоятельным(уже скомпелированным) приложением. Т.е. надо вводить куски программы в textbox и что-бы они становились не значениями какой-то переменной, а именно кусками алгоритма... к примеру что-бы в приложение для решения уравнений пользователь просто вводил своё уравнение, не влезая в среду разработки и не правя код вручную...
Надеюсь вы меня поняли и поможете мне :D

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.12.2006 (Вс) 3:20

Чувак! Ты на пороге создания своего иде!
На твой вопрос отвечаю:
Код: Выделить всё

if textbox.text = "msgbox a" then goto L_MsgBox
...
L_MsgBox: msgbox a



принцип, надеюсь ясен...
Удачи!

З.Ы. Так и создаются скрипты.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Death666
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 17.12.2006 (Вс) 2:19
Откуда: Минск

Сообщение Death666 » 17.12.2006 (Вс) 3:35

VB_D3D_Денис, спасибо за ответ, но я, всё же, не совсем понял :oops: ... Можешь скинуть какую-нибудь литературку по этому вопросу... или попробовать сам объяснить)?...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.12.2006 (Вс) 4:29

Смысл в том, что все команды которые ты будешь вводить в программу, в ней будут занесены изначально в виде... В своем виде. Но, при вводе текста, твоя программа должна различать ключевые слова, такие как "dim" или "dir" и соответствующе на них реагировать.
Так делает, собственно говоря, любой язык программирования или коммандный интерпретатор. Конечно, тебе не надо дублировать весь бейсик. Достаточно тех команд, которые ты будешь использовать.
Чуть позже, как напишу, выложу тебе часть исходника своего интерпретатора правил карточных игр для своей проги, эдакого универсального карточного стола. 8)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.12.2006 (Вс) 9:57

Вон тут Tarantul в Проектах выкладывал свой скриптокомпилятор...
Изображение

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 17.12.2006 (Вс) 12:43

Death666
А в кирпичах лежит парсер строк! :)
#define ROFL 0xDDDD

Death666
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 17.12.2006 (Вс) 2:19
Откуда: Минск

Сообщение Death666 » 17.12.2006 (Вс) 16:45

Ну, вот, запугали меня страшными словами "скриптокомпилятор", "парсер строк"... :D Скажите где хоть об этом можно почитать? И где писать этот компилятор, в смысле его надо писать в самом тексте программы или как отдельное приложение создавать?..
На моём примере: есть функция, к которой всё время обращается программа рещения уравнений, эта функция и определяет вид решаемого уравнения:

Function F(x as single) as single
F=......ввод функции пользователя.... 'как сделать?
End Function

Уравнение должно быть абсолютно произвольным, т.е. какую-нибудь смесь шаблонов и ифов применить нельзя...(например, хочешь вводи полином n-ого порядка, хочешь какую-нибудь экспаненциальную ф-ю и т.д.)

Если не трудно, объясните что можно сделать в этом случае... :?:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.12.2006 (Вс) 16:50

Взять эвалюатор. Из кирпичей же.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 17.12.2006 (Вс) 17:17

Человек, возможно, не знает, что такое "кирпичи": http://bbs.vbstreets.ru/viewforum.php?f=28
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.12.2006 (Вс) 22:17

VVitafresh писал(а):Человек, возможно, не знает, что такое "кирпичи": http://bbs.vbstreets.ru/viewforum.php?f=28


Человек (и таких дюже много) не знает что такое ScriptControl идущий в комплекте с VB и его возможности.

Самый примитивный пример его использования:

Код: Выделить всё
Public Sub Main()
    Dim sCode As String

    sCode = "Sub Main" & vbCrLf & _
                "MsgBox ""Hello World "" & Year(Date())" & vbCrLf & _
            "End Sub"

    With CreateObject("ScriptControl")
        .Language = "VBScript"
        .AddCode sCode
        .Run "Main"
    End With
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.12.2006 (Вс) 22:40

Andrey Fedorov
Спасибо! Теперь стало одним что такое ScriptControl не знающим человеком (мной) меньше. Код попробовал, работает. Буду юзать.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.12.2006 (Пн) 8:25

VB_D3D_Денис писал(а):Andrey Fedorov
Спасибо! Теперь стало одним что такое ScriptControl не знающим человеком (мной) меньше. Код попробовал, работает. Буду юзать.


Да, сам ScriptControl проще объявлять ранним связыванием (а не поздним, как в примере) - удобней будет. Ну или просто на форму кинуть...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 19.12.2006 (Вт) 0:25

Я использовал такой способ:
Код: Выделить всё
Set Obj = CreateObject("ScriptControl")


а в AddCode загонял ранее прочитанный line input'ом файл .vbs
Кроме того, функции можно выполнять с параметрами, таким образом имеется реальная обратная связь между основным кодом и скриптом!
Must Have!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 19.12.2006 (Вт) 8:54

VB_D3D_Денис писал(а):Кроме того, функции можно выполнять с параметрами, таким образом имеется реальная обратная связь между основным кодом и скриптом!


Из скрипта вроде можно использовать классы собственно приложения (давно пробовал, но кажись так).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 82

    TopList