static void GenerateDynamicMethod() { if (myConverter == null) { var method = new DynamicMethod("ConvertPtrToObjReference", typeof(T), new Type[] { typeof(IntPtr) }, StaticModule.UnsafeModule); var gen = method.GetILGenerator(); gen.Emit(OpCodes.Ldarg_0); gen.Emit(OpCodes.Ret); myConverter = (Void2ObjectConverter <T>)method.CreateDelegate(typeof(Void2ObjectConverter <T>)); } }
private static void GenerateDynamicMethod() { if (myConverter == null) { var method = new DynamicMethod("ConvertPtrToObjReference", typeof(T), new[] { typeof(IntPtr) }, StaticModule.UnsafeModule); var gen = method.GetILGenerator(); // Load first argument gen.Emit(OpCodes.Ldarg_0); // return it directly. The Clr will take care of the cast! // this construct is unverifiable so we need to plug this into an assembly with // IL Verification disabled gen.Emit(OpCodes.Ret); myConverter = (Void2ObjectConverter <T>)method.CreateDelegate(typeof(Void2ObjectConverter <T>)); } }
static void GenerateDynamicMethod() { if (myConverter == null) { Console.WriteLine("[KeeFarceDLL] Dynamic Method init"); DynamicMethod method = new DynamicMethod("ConvertPtrToObjReference", typeof(T), new Type[] { typeof(IntPtr) }, typeof(IntPtr), true); var gen = method.GetILGenerator(); // Load first argument gen.Emit(OpCodes.Ldarg_0); // return it directly. The Clr will take care of the cast! // this construct is unverifiable so we need to plug this into an assembly with // IL Verification disabled gen.Emit(OpCodes.Ret); myConverter = (Void2ObjectConverter <T>)method.CreateDelegate(typeof(Void2ObjectConverter <T>)); Console.WriteLine("[KeeFarceDLL] init done"); } }