//=========================================================== // 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)); }
//=========================================================== // 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)); }