public static unsafe void Case2() { MyTestSS myss = new MyTestSS { ii = 0x1122, bb = 0x88, cc = 'a', ll = 0x7788, }; GetStructAddr <MyTestSS> getAddr = CreateMethodGetStructAddr <MyTestSS>(); IntPtr addr = getAddr(ref myss); Span <MyTestSS> spanSS = new Span <MyTestSS>(addr.ToPointer(), 1); bool dataMatch = true; if (spanSS[0].ii != myss.ii) { dataMatch = false; } if (spanSS[0].bb != myss.bb) { dataMatch = false; } if (spanSS[0].cc != myss.cc) { dataMatch = false; } if (spanSS[0].ll != myss.ll) { dataMatch = false; } if (dataMatch) { Console.WriteLine("data match"); } else { Console.WriteLine("data not match"); } }
public static void Case0() { MyTestSS myss = new MyTestSS { ii = 0x1122, bb = 0x88, cc = 'a', ll = 0x7788, }; FieldInfo[] fis = typeof(MyTestSS).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var fi in fis) { var getaddr = CreateMethod <MyTestSS>(fi); IntPtr addr = getaddr(ref myss); Console.WriteLine($"{fi.Name} \t {addr}"); } }