When writing a test case, I encountered another missing feature. This is
with mono4windows (0.12-20-6-2002). When I run the attached code it
says:

Before CreateType
Before Invoke

(process:3972): ** WARNING **: unhandled exception
System.NotImplementedException: "The requested feature is not yet
implemented"
in <0x00032> System.Reflection.Emit.TypeBuilder:GetMethodImpl
(string,System.Reflection.BindingFlags,System.Reflection.Binder,System.R
eflection.CallingConventions,System.Type[],System.Reflection.ParameterMo
difier[])
in <0x0006a> System.Type:GetMethod (string)
in <0x002d4> .Test:Main ()

RESULT: -1

I haven't yet submitted a bug, should this go under runtime or BCL?

Regards,
Jeroen

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED]] On Behalf Of Paolo Molaro
> Sent: Friday, June 21, 2002 14:42
> To: 'Mono'
> Subject: Re: [Mono-list] Re: Java VM for .NET
> 
> 
> On 06/21/02 Jeroen Frijters wrote:
> > BTW, the latest build I tried (beginning June) didn't yet 
> support the
> > AppDomain.TypeResolve event that I use, so I haven't been 
> able to run my
> > code on Mono.
> 
> If you file a bug with a test case for what it should do, you have
> greater chances to have someone fix it.
> 
> lupus
> 
> -- 
> -----------------------------------------------------------------
> [EMAIL PROTECTED]                                     debian/rules
> [EMAIL PROTECTED]                             Monkeys do it better
> 
> _______________________________________________
> Mono-list maillist  -  [EMAIL PROTECTED]
> http://lists.ximian.com/mailman/listinfo/mono-list
> 
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test 
{
        private static AssemblyBuilder assemblyBuilder;
        private static ModuleBuilder moduleBuilder;
        private static TypeBuilder lazyType;
        private static MethodBuilder lazyMethod;

        public static void Main() 
        {
                AppDomain.CurrentDomain.TypeResolve += new 
ResolveEventHandler(MyResolver);

                AssemblyName name = new AssemblyName();
                name.Name = "MyDynamicAssembly";
                assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, 
AssemblyBuilderAccess.Run);
                moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");

                lazyType = moduleBuilder.DefineType("LazyType");
                lazyMethod = lazyType.DefineMethod("lazyMethod", 
MethodAttributes.Public | MethodAttributes.Static, typeof(void), Type.EmptyTypes);

                TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType");
                MethodBuilder methodBuilder = typeBuilder.DefineMethod("method", 
MethodAttributes.Public | MethodAttributes.Static, typeof(void), Type.EmptyTypes);
                ILGenerator ilGenerator = methodBuilder.GetILGenerator();
                // NOTE: when this method is JITted the AppDomain.TypeResolve event 
should fire
                ilGenerator.Emit(OpCodes.Call, lazyMethod);
                ilGenerator.Emit(OpCodes.Ret);
                Console.WriteLine("Before CreateType");
                Type type = typeBuilder.CreateType();
                Console.WriteLine("Before Invoke");
                type.GetMethod("method").Invoke(null, new object[0]);
        }

        private static Assembly MyResolver(object sender, ResolveEventArgs args) 
        {
                Console.WriteLine("TypeResolve {0}", args.Name);
                if(args.Name == "LazyType")
                {
                        ILGenerator ilGenerator = lazyMethod.GetILGenerator();
                        ilGenerator.EmitWriteLine("Running lazy method");
                        ilGenerator.Emit(OpCodes.Ret);
                        lazyType.CreateType();
                        return assemblyBuilder;
                }
                return null;
        }
}

Reply via email to