示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="rawValue"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static object GetAsObject(FREObject rawValue)
        {
            switch (GetType(rawValue))
            {
            case FreObjectTypeSharp.Object:
            case FreObjectTypeSharp.Class:
                return(GetAsDictionary(rawValue));

            case FreObjectTypeSharp.Number:
                return(GetAsDouble(rawValue));

            case FreObjectTypeSharp.String:
                return(GetAsString(rawValue));

            case FreObjectTypeSharp.Bytearray:
                var ba = new FreByteArraySharp(rawValue);
                ba.Acquire();
                var byteData = ba.Bytes;
                ba.Release();
                return(byteData);

            case FreObjectTypeSharp.Array:
            case FreObjectTypeSharp.Vector:
                var arrFre = new FREArray(rawValue);
                return(arrFre.AsArrayList());

            case FreObjectTypeSharp.Bitmapdata:
                var bmdFre = new FreBitmapDataSharp(rawValue);
                return(bmdFre.AsBitmap());

            case FreObjectTypeSharp.Boolean:
                return(GetAsBool(rawValue));

            case FreObjectTypeSharp.Null:
                return(null);

            case FreObjectTypeSharp.Int:
                return(GetAsInt(rawValue));

            case FreObjectTypeSharp.Rectangle:
                return(new FreRectangleSharp(rawValue).Value);

            case FreObjectTypeSharp.Point:
                return(new FrePointSharp(rawValue).Value);

            case FreObjectTypeSharp.Date:
                return(GetAsDateTime(rawValue));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
示例#2
0
        /// <summary>
        /// Calls a method on a FREArray
        /// </summary>
        /// <param name="inFre"></param>
        /// <param name="methodName">The method name</param>
        /// <param name="args">Arguments to pass to the method</param>
        /// <returns></returns>
        public static FREArray Call(this FREObject inFre, string methodName, ArrayList args)
        {
            uint resultPtr = 0;
            var  ret       = new FREArray(FreSharpHelper.Core.callMethod(inFre, methodName,
                                                                         FreSharpHelper.ArgsToArgv(args), FreSharpHelper.GetArgsC(args), ref resultPtr));
            var status = (FreResultSharp)resultPtr;

            if (status == FreResultSharp.Ok)
            {
                return(ret);
            }

            FreSharpHelper.ThrowFreException(status, "cannot call method " + methodName, ret.RawValue);
            return(null);
        }
示例#3
0
        /// <summary>
        /// Calls a method on a FREArray.
        /// </summary>
        /// <param name="freObject"></param>
        /// <param name="methodName">The method name.</param>
        /// <param name="args">Arguments to pass to the method.</param>
        /// <returns></returns>
        public static FREArray Call(this FREObject freObject, string methodName, ArrayList args)
        {
            uint resultPtr = 0;
            var  fre       = FreSharpHelper.Core.callMethod(freObject, methodName,
                                                            FreSharpHelper.ArgsToArgv(args), FreSharpHelper.GetArgsC(args), ref resultPtr);
            var ret    = new FREArray(fre);
            var status = (FreResultSharp)resultPtr;

            if (status == FreResultSharp.Ok)
            {
                return(ret);
            }
            Logger.Error($"cannot call method {methodName} of {freObject.toString()}", status, fre);
            return(null);
        }
示例#4
0
 /// <summary>
 /// Converts a FREArray to an ArrayList
 /// </summary>
 /// <param name="inFre"></param>
 /// <returns></returns>
 public static ArrayList ToArrayList(this FREArray inFre) => inFre.AsArrayList();
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ArrayList GetAsArrayList()
        {
            var al  = new ArrayList();
            var len = Length;

            if (len <= 0)
            {
                return(al);
            }
            for (uint i = 0; i < len; i++)
            {
                var itm  = At(i);
                var type = itm.Type();
                switch (type)
                {
                case FreObjectTypeSharp.String:
                    al.Add(FreSharpHelper.GetAsString(itm));
                    break;

                case FreObjectTypeSharp.Bytearray:
                    var ba = new FreByteArraySharp(itm);
                    ba.Acquire();
                    var baTarget = new byte[ba.Length];
                    ba.Bytes.CopyTo(baTarget, 0);
                    al.Add(baTarget);
                    ba.Release();
                    break;

                case FreObjectTypeSharp.Array:
                case FreObjectTypeSharp.Vector:
                    var arrFre = new FREArray(itm);
                    al.Add(arrFre.GetAsArrayList());
                    break;

                case FreObjectTypeSharp.Bitmapdata:
                    var bmdFre = new FreBitmapDataSharp(itm);
                    al.Add(bmdFre.GetAsBitmap());
                    break;

                case FreObjectTypeSharp.Boolean:
                    al.Add(FreSharpHelper.GetAsBool(itm));
                    break;

                case FreObjectTypeSharp.Null:
                    break;

                case FreObjectTypeSharp.Int:
                    al.Add(FreSharpHelper.GetAsInt(itm));
                    break;

                case FreObjectTypeSharp.Object:
                case FreObjectTypeSharp.Class:
                    al.Add(FreSharpHelper.GetAsDictionary(itm));
                    break;

                case FreObjectTypeSharp.Number:
                    al.Add(FreSharpHelper.GetAsDouble(itm));
                    break;

                case FreObjectTypeSharp.Rectangle:
                    var rectFre = new FreRectangleSharp(itm);
                    al.Add(rectFre.Value);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            return(al);
        }