Страница: 1 |
Вопрос: Динамическое выполнение кода vb6 | Добавлено: 28.02.11 23:30 |
Автор вопроса: ![]() |
Народ можно ли на vb6 сделать чтобы можно было добавить и выполнить куски кода к исходной программе?
например есть текстбокс и кнопка.в текстбокс пишем MsgBox "YAHOO" нажимаем кнопку и код выполняется? Нашел статью под VB.NET но дотнет мне ненадо...Можете помочь?может кто код сможет переделать? вот ссылка http://www.codenet.ru/progr/vbasic/Dot-Net/Dynamic-Execution.php а вот код: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim objCodeCompiler As System.CodeDom.Compiler.ICodeCompiler = New _ VBCodeProvider().CreateCompiler ' создали объект нашего компилятора Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters() ' а это параметры к нему (что-то типа imports, можно конечно и без этого, ' но тогда это все придется дописывать к программе самому пользователю) objCompilerParameters.ReferencedAssemblies.Add("System.dll") objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll") objCompilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll") ' добавили нужные нам ссылки objCompilerParameters.GenerateInMemory = True ' а также укажем что это все надо генерировать в памяти Dim strCode As String = TextBox1.Text ' а это собственно наш код из текст бокса Dim objCompileResults As System.CodeDom.Compiler.CompilerResults = _ objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, strCode) ' попытаемся скомпилировать все это дело If objCompileResults.Errors.HasErrors Then ' если присутствуют какие-либо ошибки выведем пользователю первую ' можно бы было и все загнать в какой-нибудь listbox но было лень... MsgBox("Error: Line>" & objCompileResults.Errors(0).Line.ToString & ", " & _ objCompileResults.Errors(0).ErrorText) Exit Sub End If Dim objAssembly As System.Reflection.Assembly = objCompileResults.CompiledAssembly ' создаем сборку ' выполнение программы начнется с класса MainClass Dim objTheClass As Object = objAssembly.CreateInstance("MainClass") If objTheClass _ Is Nothing Then ' если такового класса нет, то увы... MsgBox("Can't load class...") Exit Sub End If ' а вот если он есть то вызываем его метод ExecuteCode и вперед... Try objTheClass.GetType.InvokeMember("ExecuteCode", System.Reflection.BindingFlags.InvokeMethod, _ Nothing, objTheClass, Nothing) Catch ex As Exception MsgBox("Error:" & ex.Message) End Try End Sub |
Ответы | Всего ответов: 3 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #1 | Добавлено: 28.02.11 23:50 |
Пример на дотнете тебе никак не поможет. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ICQ: 463865965 Вопросов: 31 Ответов: 190 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 01.03.11 18:52 |
почему? на vb6 никак незя такое сделать? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 01.03.11 19:38 |
Юзай Microsoft ScriptControl, он входит в комплект |
Страница: 1 |
|