EMMANUELTAVE
Messages postés22Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 3 janvier 2008
-
30 déc. 2007 à 22:15
divadav
Messages postés94Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention22 janvier 2009
-
3 janv. 2008 à 08:01
bonsoir a tous
je suis en train de passer une application de VB6 a VB2005.
J'utilisais avant le ScriptControl pour que mes utilisateur puisse personnonaliser mon application (acces a des objet, methode, fonction, propriété ....)
le ScriptControl n'étant plus a la "Mode" j'ai trouver de nouvelles techniques :
VSA et CodeDom
Quelqu'un peut il me dire quelles sont les differences et qu'elle technique utiliser plutot qu'une autre
ps: j'ai vu que CodeDom peut compiler des application a la volée, mais je veux que mon application executer seulement des scripts.
EMMANUELTAVE
Messages postés22Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 01:52
Voila j'ai trouvé une partie de mon boheur :
J'ai créer une Form avec un Bouton et un Textbox
txbScript.Text=
"Imports System
Imports Microsoft.VisualBasic
NameSpace Test
Class TestCode
Public Sub Main()
msgbox("hjkh
")
msgbox(5*2)
End Sub
End Class
End NameSpace"
voici le code du form :
Private
Sub butExecuter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butExecuter.Click
ExecuteCommand1()
EndSub
PrivateSub ExecuteCommand1()
Dim vbCodeProv As VBCodeProvider = New VBCodeProvider
Dim cParam As CodeDom.Compiler.CompilerParameters = New CodeDom.Compiler.CompilerParameters
' Ajout des références
cParam.ReferencedAssemblies.Add("System.dll")
' Options du compilateur
cParam.CompilerOptions = "/t:library" 'L'assembly est une bibliothèque de classe,
cParam.GenerateInMemory = True 'générée uniquement en mémoire.
' Résultat de la compilation
Dim cResult As CodeDom.Compiler.CompilerResults = vbCodeProv.CompileAssemblyFromSource(cParam, txbScript.Text)
If cResult.Errors.Count > 0Then
Dim Errors AsString = "Erreur(s) : "
ForEach ce As CodeDom.Compiler.CompilerErrorIn cResult.Errors
Errors &= vbCrLf & ce.ErrorText
Next ce
MsgBox(Errors)
EndIf
' Récupération de l'assembly généré
Dim myAssembly As System.Reflection.Assembly = cResult.CompiledAssembly
EndSub
C'est cool car la compilation en memoire est correcte !!
Mais je ne trouve pas la solution pour executer le code du textBox
Pour Ceux qui comprennent les objet System.Reflection et VBCodeProvider merci de votre aide
divadav
Messages postés94Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention22 janvier 20092 3 janv. 2008 à 08:01
Il te manque cette ligne : cParam.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
J'avais pas fait gaffe à ton post, j'ai répondu sur ma source !!
En fait, si tu veut tester du code dans Visual Studio, comme si tu l'exécutait avec CodeDom, il faut que tu fasses un nouveau projet, et que tu commence par retirer toutes les références et les espaces de noms importés (clic-droit sur ton projet, propriétés, onglet Références : tout se trouve là !)
Une fois que tu as fait ça, tu peux commencer à ajouter les assemblies que tu veux référencer, puis écrire ton code avec les imports qui vont bien... C'est un des problèmes de VS : il importe de lui même certains espaces de noms, de manière transparente pour le développeur, du coup, on a un peut l'impression qu'une fonction comme MsgBox() sort de nulle part, alors que c'est l'IDE qui a importé tout ce qu'il fallait pour que ça marche, sans rien dire !