Народ можно ли на 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
Ответить
|