void ITargetedBind.MakeTargetedId() { if (targeted_id == 0) { targeted_id = (long)Underlying.AsPointer(ref Underlying.AsRef(this)); } }
public void OffsetOfTest() { var obj = new Tester(); var int64_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.public_int64))); var string_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.public_string))); var static_int_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_int))); var static_string_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_string))); var static_object_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_object))); var struct_int64_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.public_int64))); var struct_string_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.public_string))); var struct_static_bool_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.static_bool))); var struct_static_byte_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.static_byte))); var gc_statics_base_pointer = (void *)TypeHelper.GetGCStaticsBasePointer(typeof(Tester)); var non_gc_statics_base_pointer = (void *)TypeHelper.GetNonGCStaticsBasePointer(typeof(Tester)); var struct_non_gc_statics_base_pointer = (void *)TypeHelper.GetNonGCStaticsBasePointer(typeof(Tester_Struct)); Underlying.AddByteOffset(ref TypeHelper.Unbox <long>(obj), int64_offset) = 999; Underlying.AddByteOffset(ref TypeHelper.Unbox <string>(obj), string_offset) = "F**k"; AreEqual(obj.public_int64, 999); AreEqual(obj.public_string, "F**k"); Underlying.AddByteOffset(ref Underlying.AsRef <int>(non_gc_statics_base_pointer), static_int_offset) = 123; Underlying.AddByteOffset(ref Underlying.AsRef <string>(gc_statics_base_pointer), static_string_offset) = "Dogwei"; Underlying.AddByteOffset(ref Underlying.AsRef <object>(gc_statics_base_pointer), static_object_offset) = obj; AreEqual(Tester.static_int, 123); AreEqual(Tester.static_string, "Dogwei"); AreEqual(Tester.static_object, obj); var value = new Tester_Struct(); Underlying.AddByteOffset(ref Underlying.As <Tester_Struct, long>(ref value), struct_int64_offset) = 999; Underlying.AddByteOffset(ref Underlying.As <Tester_Struct, string>(ref value), struct_string_offset) = "F**k"; AreEqual(value.public_int64, 999); AreEqual(value.public_string, "F**k"); Underlying.AddByteOffset(ref Underlying.AsRef <bool>(struct_non_gc_statics_base_pointer), struct_static_bool_offset) = true; Underlying.AddByteOffset(ref Underlying.AsRef <byte>(struct_non_gc_statics_base_pointer), struct_static_byte_offset) = 128; AreEqual(Tester_Struct.static_bool, true); AreEqual(Tester_Struct.static_byte, 128); }
public static T SlowReadParse <T>(string str) { if (typeof(T) == typeof(DateTime)) { return(Underlying.As <DateTime, T>(ref Underlying.AsRef(DateTime.Parse(str)))); } else if (typeof(T) == typeof(DateTimeOffset)) { return(Underlying.As <DateTimeOffset, T>(ref Underlying.AsRef(DateTimeOffset.Parse(str)))); } else if (typeof(T) == typeof(Guid)) { return(Underlying.As <Guid, T>(ref Underlying.AsRef(new Guid(str)))); } else if (typeof(T) == typeof(long)) { return(Underlying.As <long, T>(ref Underlying.AsRef(long.Parse(str, NumberStyle)))); } else if (typeof(T) == typeof(ulong)) { return(Underlying.As <ulong, T>(ref Underlying.AsRef(ulong.Parse(str, NumberStyle)))); } else if (typeof(T) == typeof(double)) { return(Underlying.As <double, T>(ref Underlying.AsRef(double.Parse(str, NumberStyle)))); } else if (typeof(T) == typeof(decimal)) { return(Underlying.As <decimal, T>(ref Underlying.AsRef(decimal.Parse(str, NumberStyle)))); } else if (typeof(T) == typeof(RWPathInfo)) { fixed(char *chars = str) { return((T)(object)ParseReference(chars, str.Length)); } } return(default);
/// <summary> /// 将字节码转换为 16 进制字符串。 /// </summary> /// <param name="bytes">字节码</param> /// <returns>返回一个字符串</returns> public static string ToHexString(this ReadOnlySpan <byte> bytes) { return(ToHexString(ref Underlying.AsRef(bytes[0]), bytes.Length)); }
public static unsafe void StoreStaticFieldValue <TValue>(TValue value, IntPtr address) { Underlying.AsRef <TValue>((void *)address) = value; }
public static unsafe TValue LoadStaticFieldValue <TValue>(IntPtr address) { return(Underlying.AsRef <TValue>((void *)address)); }