using System; using System.Reflection; using System.Reflection.Emit; using System.Threading; using System.Windows.Forms; namespace OpenSim.ScriptEngines.LSL { public class Test { public void SayHello(string[] args) { AssemblyName asmName = new AssemblyName(); asmName.Name = "HelloWorld"; AssemblyBuilder asmBuilder = Thread.GetDomain().DefineDynamicAssembly (asmName, AssemblyBuilderAccess.RunAndSave); ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule ("HelloWorld"); TypeBuilder typeBuilder = modBuilder.DefineType( "Hello", TypeAttributes.Public, typeof(object), new Type[] { typeof(IHello) }); MethodBuilder methodBuilder = typeBuilder.DefineMethod("SayHello", MethodAttributes.Private | MethodAttributes.Virtual, typeof(void), new Type[] { typeof(string) }); typeBuilder.DefineMethodOverride(methodBuilder, typeof(IHello).GetMethod("SayHello")); ILGenerator il = methodBuilder.GetILGenerator(); // string.Format("Hello, {0} World!", toWhom) // il.Emit(OpCodes.Ldstr, "Hello World!"); // Console.WriteLine("Hello, World!"); // il.Emit(OpCodes.Call, typeof(Console).GetMethod ("WriteLine", new Type[] { typeof(string) })); il.Emit(OpCodes.Ret); Type type = typeBuilder.CreateType(); IHello hello = (IHello)Activator.CreateInstance(type); hello.SayHello("Emit"); } } }