From 59d507a17a10d03e0ef02a5f6a99d4486daf6d4a Mon Sep 17 00:00:00 2001 From: Ulysses Date: Tue, 31 Oct 2023 19:50:47 +0800 Subject: [PATCH] init `out struct` parameters to prevent NullReferenceReference --- Source/VSProj/Src/Tools/CodeTranslator.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Source/VSProj/Src/Tools/CodeTranslator.cs b/Source/VSProj/Src/Tools/CodeTranslator.cs index 104bc51..0020c55 100644 --- a/Source/VSProj/Src/Tools/CodeTranslator.cs +++ b/Source/VSProj/Src/Tools/CodeTranslator.cs @@ -1261,6 +1261,26 @@ unsafe MethodIdInfo getMethodId(MethodReference callee, MethodDefinition caller, } } + //修复out struct问题 + for (int i = 0; i < method.Parameters.Count; i++) + { + var parameter = method.Parameters[i]; + if (parameter.IsOut && parameter.ParameterType.GetElementType().IsValueType && !parameter.ParameterType.GetElementType().IsPrimitive) + { + code.Add(new Core.Instruction + { + Code = Core.Code.Ldarg, + Operand = i + (method.HasThis ? 1 : 0) + }); + code.Add(new Core.Instruction + { + Code = Core.Code.Initobj, + Operand = addExternType(parameter.ParameterType.GetElementType()) + }); + offsetAdd += 2; + } + } + if (offsetAdd > 0) { var ilNewOffset = new Dictionary();