Как создать программно исполняемые ехе файл? допустим, есть программа в которой юзер выбирает сколько кнопок будет на форме. далее нажимает кнопку пуск и программа создает в папке ехе файл. Далее запускаем этот файл и должна появиться форма с кнопками. Это ваще реально? Мнеб хотябы создавать ехе файл с формой(программно). Может записывать какито данные в двоичный(binary) файл? Ну очень нуно=) Спасибо заранее.
В принципе это реально.(Пример под Visual Basic 6.0)
По идее надо сбацать 2 проги:
1)В первую твой юзер загоняет что ему и где надо, после чего прога записывает это всё в текстовый файл,
2)А вторая прога считывает данные из текстового файла и перестраевается по тем параметрам которые в этом файле описаны.Т.е. во второй проге ты создаёш массив элементов(всех которые есть) и ставиш им свойство .Visible = False. При загрузке формы она считывает из файла количество кнопок, текстбоксов и т.д. и расставляет их на форме.
Для справки:
Чтобы создать на форме кнопку нужно сделать массив переменных( просто жмёш копировать, после вставить и на вопрос отвечаеш да), и в коде написать:
Load Command1("индекс контрола(числа от 1 до бесконечности, 0 не берётся т.к исходный контрол имеет индекс 0")
вопщем я так думаю тут или первая прога создает какойто файл, а вторая читает и делает чо нада (это самый простой вариант), второй вариант - WPF тоже не так сложно, третий вариант - это если хошь стать великим мастером компиляции, выглядит это примерно вот так и представляет собой полную жопу:
Dim name AsNew AssemblyName("newexe")
Dim asmb As Emit.AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, Emit.AssemblyBuilderAccess.Save)
Dim modb As Emit.ModuleBuilder = asmb.DefineDynamicModule("newexe.exe")
Dim formBuilder As Emit.TypeBuilder = modb.DefineType("Form1", TypeAttributes.AnsiClass Or TypeAttributes.AutoClass _
Or TypeAttributes.PublicOr TypeAttributes.BeforeFieldInit, _
GetType(Form))
Dim constrBuilder As Emit.ConstructorBuilder = formBuilder.DefineConstructor(MethodAttributes.Public _
Or MethodAttributes.HideBySig Or MethodAttributes.SpecialName Or MethodAttributes.RTSpecialName, CallingConventions.Standard, New Type() {})
Dim fieldBuilder As Emit.FieldBuilder = formBuilder.DefineField("components", GetType(System.ComponentModel.IContainer), FieldAttributes.Private)
Dim methb As Emit.MethodBuilder = formBuilder.DefineMethod("InitializeComponent", MethodAttributes.PrivateOr MethodAttributes.HideBySig)
Dim il As Emit.ILGenerator = methb.GetILGenerator()
methb = formBuilder.DefineMethod("Dispose", MethodAttributes.Family Or MethodAttributes.HideBySig Or MethodAttributes.Virtual, GetType(Void), New Type() {GetType(Boolean)})
Dim paramBuilder As Emit.ParameterBuilder = methb.DefineParameter(1, ParameterAttributes.None, "disposing")
Dim q As MethodInfo = GetType(System.Windows.Forms.Form).GetMethod("Dispose", BindingFlags.CreateInstance Or BindingFlags.DeclaredOnly Or BindingFlags.DefaultOr BindingFlags.ExactBinding Or BindingFlags.FlattenHierarchy Or BindingFlags.GetField Or BindingFlags.GetProperty Or BindingFlags.IgnoreCase Or BindingFlags.IgnoreReturn Or BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.NonPublic Or BindingFlags.OptionalParamBinding Or BindingFlags.PublicOr BindingFlags.PutDispProperty Or BindingFlags.PutRefDispProperty Or BindingFlags.SetField Or BindingFlags.SetProperty Or BindingFlags.StaticOr BindingFlags.SuppressChangeType, Nothing, CallingConventions.Standard, New Type() {GetType(Boolean)}, Nothing)
il.Emit(Emit.OpCodes.Call, q)
il.Emit(Emit.OpCodes.Nop)
il.Emit(Emit.OpCodes.Ret)
Dim typeBuilder As Emit.TypeBuilder = modb.DefineType("Program", TypeAttributes.Abstract Or TypeAttributes.AnsiClass _
Or TypeAttributes.AutoClass Or TypeAttributes.Sealed _
Or TypeAttributes.BeforeFieldInit Or TypeAttributes.NotPublic, _
GetType(Object))
methb = typeBuilder.DefineMethod("Main", MethodAttributes.HideBySig Or MethodAttributes.Private _
Or MethodAttributes.Static, Type.GetType("Void"), Type.EmptyTypes)