示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }
示例#3
0
 public string GetString(IntPtr isolate, IntPtr holder, bool isByRef)
 {
     return(PuertsDLL.GetStringFromValue(isolate, holder, isByRef));
 }
示例#4
0
 public string GetString(bool isByRef)
 {
     return(PuertsDLL.GetStringFromValue(isolate, value, isByRef));
 }
示例#5
0
        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);
        }