cs_leam19
Messages postés10Date d'inscriptionvendredi 9 mars 2012StatutMembreDernière intervention30 juillet 2012
-
17 mai 2012 à 18:43
cs_leam19
Messages postés10Date d'inscriptionvendredi 9 mars 2012StatutMembreDernière intervention30 juillet 2012
-
30 juil. 2012 à 22:18
Alors voila: je voudrais creer un programme en VB.net, qui va me permettre de generer des .exe a partir de codes VB
Donc, je voudrais connaitre le code quil faut pour transformer (si possible) le code VB en binaire, puis le mettre dans un fichier .exe
J'éspere que cest possible...
Merci de vos réponses, et désolé si je ne suis pas dans la bonne section ^^
Donc tu veux que l'on réinvente la roue pour toi et que l'on te donne un compilateur. VB le fait déjà, et le Framework peut le faire en ligne de commande à partir d'un banal fichier texte.
Ça sent le PFE sans effort, mais ce n'est pas vraiment dans l'esprit de ce forum.
cs_leam19
Messages postés10Date d'inscriptionvendredi 9 mars 2012StatutMembreDernière intervention30 juillet 2012 18 mai 2012 à 13:03
Je ne comprend pas vraiment les raisons de cette fureur ;) je me suis peut etre mal expliqué: je voudrai creer un generateur: je precise: je veux faire un logiciel qui va generer des logiciels qui beep ou on peut choisir le nombre et lintervalle entre deu bips ;)
et je voudrais si possible que ca les generent en .exe
En claire, je voudrais savoir si je epux convertir du VB en binaire et le mettre en exe dans mon programme ....
Comme l'a dit cmarcotte, le compilateur vbc.exe installé avec le framework permet de générer un .exe à partir d'un fichier texte.
Ce fichier texte devra contenir du code vb classique que ton programme pourra modifier à loisirs en changeant des valeurs de variables ici ou là.
Ton programme devra lancer ensuite le compilateur vbc.exe (habituellement dans c:/windows/microsoft.net/framework/version/) en précisant le nom de ce fichier texte en paramètre ainsi que le nom souhaité de ton exe puis les noms des dll système à importer.
Exemple de ligne de commande pour une appli console :
cs_leam19
Messages postés10Date d'inscriptionvendredi 9 mars 2012StatutMembreDernière intervention30 juillet 2012 19 mai 2012 à 16:28
je m'obstine a trouver un langage de programmation qui me va bien: jeai commencé par le C#: Mais paff, jarrivais pas a installer de bibli ;)
puis je suis passer au python: mais j aimais pas, on pouvait pas vraiment faire de exe, et ,pis linterface graphique...Puis le Java: pareil que pour le python...puis le vb, et je crois que j ai trouver ;)
Je m'obstinerai plus tard, pour l'instant, j ai d autres choses a apprendre!!!
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 20149 23 mai 2012 à 22:25
Bonjour,
Il est tout à fait possible de créer des assembly (.exe ou .dll) depuis du code .Net.
La technique se nomme " Reflection Emit ". Je vous laisse le soin d'effectuer des recherches de tuto sur le web.
La partie la plus complexe de cette technique est l'insertion du code IL.
Voici un petit exemple de code qui créé un fichier "DynamicPersonne.exe" en partant de 0. Cet exécutable est une simple console qui affiche un message, mais il nécessite déjà pas mal de réflexion.
'Déclare un nom d'assembly
Dim assemblyName As AssemblyName = New AssemblyName("DynamicPersonne")
'Crée un nouvel assembly dynamic dans l'AppDomain courant
Dim dynamicAssembly As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave)
For Each s As AssemblyName In dynamicAssembly.GetReferencedAssemblies()
Console.WriteLine(s)
Next
'Crée un nouveau module dans l'assembly
Dim dynamicModule As ModuleBuilder = dynamicAssembly.DefineDynamicModule("DynamicPersonne.exe", "DynamicPersonne.exe")
'Crée une classe dans le module
Dim dynamicType As TypeBuilder = dynamicModule.DefineType("DynamicPersonne.Program", TypeAttributes.Class Or TypeAttributes.Sealed)
'Crée une methode main dans la classe (point d'entré)
Dim dynamicMethode As MethodBuilder = dynamicType.DefineMethod("Main", MethodAttributes.Public Or MethodAttributes.Static, Nothing, Nothing)
'Ajoute l'attribut STAThread a la methode Main
Dim t As Type = GetType(STAThreadAttribute)
Dim ci As ConstructorInfo = t.GetConstructor(Type.EmptyTypes)
dynamicMethode.SetCustomAttribute(New CustomAttributeBuilder(ci, New Object() {}))
'Récupère le MethodInfo de Console.WritLine
Dim Myconsole As Type = GetType(Console)
Dim writeLine As MethodInfo = Myconsole.GetMethod("WriteLine", New Type() {GetType(String)})
'Récupère le MethodInfo de Console.Read
Dim readLine As MethodInfo = Myconsole.GetMethod("Read", Type.EmptyTypes)
'Insert du code IL dans la methode
Dim il As ILGenerator = dynamicMethode.GetILGenerator()
il.Emit(OpCodes.Ldstr, "Je m appelle Olivier")
il.Emit(OpCodes.Call, writeLine)
il.Emit(OpCodes.Call, readLine)
il.Emit(OpCodes.Pop)
il.Emit(OpCodes.Ret)
'Materialization de la classe
dynamicType.CreateType()
'Définie le point d'entré
dynamicAssembly.SetEntryPoint(dynamicMethode, PEFileKinds.ConsoleApplication)
'Sauvegarde de l'assembly
dynamicAssembly.Save("DynamicPersonne.exe")
Vous avez maintenant les bases. A vous de jouer ...