void LoadType(IntPtr isolate, IntPtr info, IntPtr self, int paramLen) { try { Type type = null; var value = PuertsDLL.GetArgumentValue(info, 0); if (PuertsDLL.GetJsValueType(isolate, value, false) == JsValueType.String) { string classFullName = PuertsDLL.GetStringFromValue(isolate, value, false); var maybeType = TypeRegister.GetType(classFullName); if (paramLen == 1) { type = maybeType; } else if (maybeType != null && maybeType.IsGenericTypeDefinition && maybeType.GetGenericArguments().Length == (paramLen - 1)) //泛型 { var genericArguments = new Type[paramLen - 1]; for (int i = 1; i < paramLen; i++) { value = PuertsDLL.GetArgumentValue(info, i); if (PuertsDLL.GetJsValueType(isolate, value, false) != JsValueType.Function) { return; } var argTypeId = PuertsDLL.GetTypeIdFromValue(isolate, value, false); if (argTypeId == -1) { return; } genericArguments[i - 1] = TypeRegister.GetType(argTypeId); } type = maybeType.MakeGenericType(genericArguments); //UnityEngine.Debug.Log(type); } } if (type == null) { return; } int typeId = TypeRegister.GetTypeId(isolate, type); PuertsDLL.ReturnClass(isolate, info, typeId); } catch (Exception e) { PuertsDLL.ThrowException(isolate, "loadClass throw c# exception:" + e.Message + ",stack:" + e.StackTrace); } }
Type GetTypeFromJs(IntPtr isolate, IntPtr info, IntPtr self, int paramLen) { Type type = null; var value = PuertsDLL.GetArgumentValue(info, 0); if (PuertsDLL.GetJsValueType(isolate, value, false) == JsValueType.String) { string classFullName = PuertsDLL.GetStringFromValue(isolate, value, false); var maybeType = TypeRegister.GetType(classFullName); if (paramLen == 1) { type = maybeType; } else if (maybeType != null && maybeType.IsGenericTypeDefinition && maybeType.GetGenericArguments().Length == (paramLen - 1)) //泛型 { var genericArguments = new Type[paramLen - 1]; for (int i = 1; i < paramLen; i++) { value = PuertsDLL.GetArgumentValue(info, i); if (PuertsDLL.GetJsValueType(isolate, value, false) != JsValueType.Function) { return(null); } var argTypeId = PuertsDLL.GetTypeIdFromValue(isolate, value, false); if (argTypeId == -1) { return(null); } genericArguments[i - 1] = TypeRegister.GetType(argTypeId); } type = maybeType.MakeGenericType(genericArguments); } } else if (PuertsDLL.GetJsValueType(isolate, value, false) == JsValueType.NativeObject) { type = StaticTranslate <Type> .Get(Index, isolate, NativeValueApi.GetValueFromArgument, value, false); } return(type); }
public string GetString(IntPtr isolate, IntPtr holder, bool isByRef) { return(PuertsDLL.GetStringFromValue(isolate, holder, isByRef)); }
public string GetString(bool isByRef) { return(PuertsDLL.GetStringFromValue(isolate, value, isByRef)); }
bool FastArraySet(IntPtr isolate, IntPtr info, IntPtr self, object obj, uint index, IntPtr value) { bool hited = true; var jsType = PuertsDLL.GetJsValueType(isolate, value, false); var type = obj.GetType(); if (type == typeof(int[]) && jsType == JsValueType.Number) { int[] array = obj as int[]; array[index] = (int)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(float[]) && jsType == JsValueType.Number) { float[] array = obj as float[]; array[index] = (float)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(double[]) && jsType == JsValueType.Number) { double[] array = obj as double[]; array[index] = PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(bool[]) && jsType == JsValueType.Boolean) { bool[] array = obj as bool[]; array[index] = PuertsDLL.GetBooleanFromValue(isolate, value, false); } else if (type == typeof(long[]) && jsType == JsValueType.BigInt) { long[] array = obj as long[]; array[index] = PuertsDLL.GetBigIntFromValueChecked(isolate, value, false); } else if (type == typeof(ulong[]) && jsType == JsValueType.BigInt) { ulong[] array = obj as ulong[]; array[index] = (ulong)PuertsDLL.GetBigIntFromValueChecked(isolate, value, false); } else if (type == typeof(sbyte[]) && jsType == JsValueType.Number) { sbyte[] array = obj as sbyte[]; array[index] = (sbyte)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(short[]) && jsType == JsValueType.Number) { short[] array = obj as short[]; array[index] = (short)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(ushort[]) && jsType == JsValueType.Number) { ushort[] array = obj as ushort[]; array[index] = (ushort)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(char[]) && jsType == JsValueType.Number) { char[] array = obj as char[]; array[index] = (char)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(uint[]) && jsType == JsValueType.Number) { uint[] array = obj as uint[]; array[index] = (uint)PuertsDLL.GetNumberFromValue(isolate, value, false); } else if (type == typeof(string[]) && jsType == JsValueType.String) { string[] array = obj as string[]; array[index] = PuertsDLL.GetStringFromValue(isolate, value, false); } else if (type == typeof(string[]) && jsType == JsValueType.NullOrUndefined) { string[] array = obj as string[]; array[index] = null; } else { hited = false; } return(hited); }