Esempio n. 1
0
        //===========================================================
        //		Invoke
        //===========================================================
        public override Object Invoke(JavaScript.Object dummy, Array arguments)
        {
            System.Reflection.MethodInfo m;
            try{
                m = this.SelectOverload(arguments);
            }catch (System.Exception e) { throw e; }
            object ret = m.Invoke(this.obj, FunctionBase.ConvertParams(m, arguments));

            return(Global.ConvertFromManaged(ret));
        }
Esempio n. 2
0
        //===========================================================
        //		Invoke
        //===========================================================
        /// <summary>
        /// 指定したオブジェクトの当該メソッドを実行します
        /// </summary>
        /// <param name="obj">オブジェクトを指定します</param>
        /// <param name="arguments">メソッドに渡す引数を指定します</param>
        /// <returns>メソッドの結果を返します</returns>
        /// <remarks>
        /// 案1: Type と Methods を保持し Invoke の命令が来たら
        /// <list>
        /// <item><description>Type と obj を照合</description></item>
        /// <item><description>引数リストの比較</description></item>
        /// <item><description>実行</description></item>
        /// </list>
        /// </remarks>
        public override JavaScript.Object Invoke(JavaScript.Object obj, JavaScript.Array arguments)
        {
            // ManagedObject 以外の時 (Javascript.Object を直接指定した場合の時) にも対応する事にする。
            //	古いコード
            //		if(!(obj is Javascript.ManagedObject))throw new System.ArgumentException(INVOKE_NOTMANAGED,"obj");
            //		object o=((Javascript.ManagedObject)obj).Value;
            object o = (obj is JavaScript.ManagedObject)?((JavaScript.ManagedObject)obj).Value:obj;

            //CHECK>×: IsSubclassOf で継承した interface も確認する事が出来るかどうか
            if (!Global.IsCastable(o.GetType(), this.type))
            {
                throw new System.ArgumentException(INVOKE_NOTSUPPORTED, "obj");
            }
            System.Reflection.MethodInfo m;
            try{
                m = this.SelectOverload(arguments);
            }catch (System.Exception e) { throw e; }
            object ret = m.Invoke(o, FunctionBase.ConvertParams(m, arguments));

            return(Global.ConvertFromManaged(ret));
        }