4 // Regression test for bug #47295.
6 // Test from Marcus Urban (mathpup@mylinuxisp.com)
10 using System
.Reflection
;
11 using System
.Reflection
.Emit
;
12 using System
.Runtime
.InteropServices
;
17 public static void Method(int value)
19 Console
.WriteLine( "Method( {0} )", value );
23 [StructLayout(LayoutKind
.Sequential
)]
24 internal struct DelegateList
26 internal Delegate del
;
30 public static void Main()
32 // Create a dynamic assembly and module to contain the
33 // subclass of MulticastDelegate that we will create
35 AssemblyName asmName
= new AssemblyName();
36 asmName
.Name
= "DynamicAssembly";
38 AssemblyBuilder asmBuilder
=
39 AppDomain
.CurrentDomain
.DefineDynamicAssembly(
40 asmName
, AssemblyBuilderAccess
.Run
);
42 ModuleBuilder modBuilder
= asmBuilder
.DefineDynamicModule
45 TypeBuilder typeBuilder
= modBuilder
.DefineType( "MyType",
46 TypeAttributes
.Public
| TypeAttributes
.Class
| TypeAttributes
.Sealed
,
47 typeof( System
.MulticastDelegate
) );
49 ConstructorBuilder cb
= typeBuilder
.DefineConstructor(
50 MethodAttributes
.Public
| MethodAttributes
.HideBySig
|
51 MethodAttributes
.RTSpecialName
| MethodAttributes
.SpecialName
,
52 CallingConventions
.Standard
,
53 new Type
[] { typeof(Object), typeof (IntPtr) }
);
55 cb
.SetImplementationFlags( MethodImplAttributes
.Runtime
|
56 MethodImplAttributes
.Managed
);
58 MethodBuilder mb
= typeBuilder
.DefineMethod(
60 MethodAttributes
.Public
| MethodAttributes
.Virtual
| MethodAttributes
.
63 new Type
[] { typeof(int) }
);
65 mb
.SetImplementationFlags( MethodImplAttributes
.Runtime
|
66 MethodImplAttributes
.Managed
);
67 ParameterBuilder pb
= mb
.DefineParameter (1, ParameterAttributes
.HasFieldMarshal
, "foo");
68 pb
.SetMarshal (UnmanagedMarshal
.DefineUnmanagedMarshal (UnmanagedType
.I2
));
70 // Create an instance of the delegate type and invoke it -- just to test
72 Type myDelegateType
= typeBuilder
.CreateType();
73 Delegate d
= Delegate
.CreateDelegate( myDelegateType
, typeof
74 ( Testing
), "Method" );
75 d
.DynamicInvoke( new object[] { 8 }
);
77 DelegateList delegateList
= new DelegateList();
79 IntPtr ptr
= Marshal
.AllocHGlobal( Marshal
.SizeOf( delegateList
) );
81 // The execption seems to occur at this statement:
82 Marshal
.StructureToPtr( delegateList
, ptr
, false );