示例#1
0
文件: CallSite.cs 项目: wclwksn/code
        //        E/AndroidRuntime(27179): Caused by: java.lang.RuntimeException: __CallSite __InvokeMemberBinder
        //E/AndroidRuntime(27179):        at ScriptCoreLibJava.BCLImplementation.System.Runtime.CompilerServices.__CallSite__InvokeMemberBinder___c__DisplayClass8_1.___InvokeMemberBinder_b__0(__CallSite__InvokeMemberBinder___c__DisplayClass8_1.java:50)

        public static __CallSite <T> __InvokeMemberBinder <T>(__InvokeMemberBinder InvokeMember)
        {
            var r = default(Delegate);

            var argumentInfo      = InvokeMember.argumentInfo;
            var argumentInfoCount = argumentInfo.Count();

            //Console.WriteLine("__InvokeMemberBinder: " + new
            //{
            //    InvokeMember.Name,
            //    argumentInfoCount
            //});

            var IsReturnVoid = InvokeMember.flags == global::Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ResultDiscarded;


            #region (arg1)
            if (argumentInfoCount == 2)
            {
                if (IsReturnVoid)
                {
                    r = new Action <__CallSite, object, object>(
                        (site, subject, arg1) =>
                    {
                        object result = null;

                        #region xDynamicObject
                        var xDynamicObject = subject as DynamicObject;
                        if (xDynamicObject != null)
                        {
                            if (xDynamicObject.TryInvokeMember(
                                    (InvokeMemberBinder)(object)InvokeMember,
                                    new[] { arg1 },
                                    out result)
                                )
                            {
                                return;
                            }
                        }
                        #endregion

                        var TargetType = subject.GetType();
                        var Candidates = TargetType.GetMethods().Where(m => m.Name == InvokeMember.Name).ToArray();


                        //Console.WriteLine("__CallSite __InvokeMemberBinder arg1 " + new { subject, TargetType, InvokeMember.Name, arg1, Candidates = Candidates.Length });

                        if (Candidates.Length == 1)
                        {
                            // X:\jsc.svn\examples\java\hybrid\JVMCLRDynamicInvoke\JVMCLRDynamicInvoke\Program.cs
                            Candidates[0].Invoke(
                                subject,
                                new object[] { arg1 }
                                );
                            return;
                        }


                        throw new NotImplementedException("__CallSite __InvokeMemberBinder " + new { subject, TargetType, InvokeMember.Name, arg1, Candidates = Candidates.Length });
                    }
                        );

                    return(r);
                }

                r = new Func <__CallSite, object, object, object>(
                    (site, subject, arg1) =>
                {
                    object result = null;

                    #region DynamicObject
                    var xDynamicObject = subject as DynamicObject;
                    if (xDynamicObject != null)
                    {
                        if (xDynamicObject.TryInvokeMember(
                                (InvokeMemberBinder)(object)InvokeMember,
                                new[] { arg1 },
                                out result)
                            )
                        {
                            return(result);
                        }
                    }
                    #endregion

                    Console.WriteLine("__CallSite __InvokeMemberBinder arg1 " + new { subject, arg1 });



                    throw new NotImplementedException("__CallSite __InvokeMemberBinder");
                }
                    );

                return(r);
            }
            #endregion

            #region (void)
            if (IsReturnVoid)
            {
                r = new Action <__CallSite, object>(
                    (site, subject) =>
                {
                    object result = null;

                    var x = subject as DynamicObject;
                    if (x != null)
                    {
                        if (x.TryInvokeMember(
                                (InvokeMemberBinder)(object)InvokeMember,
                                new object[0],
                                out result)
                            )
                        {
                            return;
                        }
                    }

                    // __CallSite __InvokeMemberBinder { subject = DIDIsoDepCertificate.Activities.ApplicationActivity@2057ddf8 }


                    Console.WriteLine("__CallSite __InvokeMemberBinder " + new { subject });



                    throw new NotImplementedException("__CallSite __InvokeMemberBinder");
                }
                    );

                return(r);
            }

            r = new Func <__CallSite, object, object>(
                (site, subject) =>
            {
                object result = null;

                #region xDynamicObject
                var xDynamicObject = subject as DynamicObject;
                if (xDynamicObject != null)
                {
                    if (xDynamicObject.TryInvokeMember(
                            (InvokeMemberBinder)(object)InvokeMember,
                            new object[0],
                            out result)
                        )
                    {
                        return(result);
                    }
                }
                #endregion

                Console.WriteLine("__CallSite __InvokeMemberBinder " + new { subject });


                throw new NotImplementedException("__CallSite __InvokeMemberBinder");
            }
                );

            return(r);

            #endregion
        }
示例#2
0
        //        E/AndroidRuntime(27179): Caused by: java.lang.RuntimeException: __CallSite __InvokeMemberBinder
        //E/AndroidRuntime(27179):        at ScriptCoreLibJava.BCLImplementation.System.Runtime.CompilerServices.__CallSite__InvokeMemberBinder___c__DisplayClass8_1.___InvokeMemberBinder_b__0(__CallSite__InvokeMemberBinder___c__DisplayClass8_1.java:50)

        public static __CallSite <T> __InvokeMemberBinder <T>(__InvokeMemberBinder InvokeMember)
        {
            var r = default(Delegate);

            var argumentInfo      = InvokeMember.argumentInfo;
            var argumentInfoCount = argumentInfo.Count();

            //Console.WriteLine("__InvokeMemberBinder: " + new
            //{
            //    InvokeMember.Name,
            //    argumentInfoCount
            //});

            var IsReturnVoid = InvokeMember.flags == global::Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ResultDiscarded;


            #region (arg1)
            if (argumentInfoCount == 2)
            {
                #region IsReturnVoid
                if (IsReturnVoid)
                {
                    r = new Action <__CallSite, object, object>(
                        (site, subject, arg1) =>
                    {
                        object result = null;

                        #region xDynamicObject
                        var xDynamicObject = subject as DynamicObject;
                        if (xDynamicObject != null)
                        {
                            if (xDynamicObject.TryInvokeMember(
                                    (InvokeMemberBinder)(object)InvokeMember,
                                    new[] { arg1 },
                                    out result)
                                )
                            {
                                return;
                            }
                        }
                        #endregion

                        var TargetType = subject.GetType();
                        var Candidates = TargetType.GetMethods().Where(m => m.Name == InvokeMember.Name).ToArray();


                        //Console.WriteLine("__CallSite __InvokeMemberBinder arg1 " + new { subject, TargetType, InvokeMember.Name, arg1, Candidates = Candidates.Length });

                        if (Candidates.Length == 1)
                        {
                            // X:\jsc.svn\examples\java\hybrid\JVMCLRDynamicInvoke\JVMCLRDynamicInvoke\Program.cs
                            Candidates[0].Invoke(
                                subject,
                                new object[] { arg1 }
                                );
                            return;
                        }


                        throw new NotImplementedException("__CallSite __InvokeMemberBinder " + new { subject, TargetType, InvokeMember.Name, arg1, Candidates = Candidates.Length });
                    }
                        );

                    return(r);
                }
                #endregion


                r = new Func <__CallSite, object, object, object>(
                    (site, subject, arg1) =>
                {
                    object result = null;

                    #region DynamicObject
                    var xDynamicObject = subject as DynamicObject;
                    if (xDynamicObject != null)
                    {
                        if (xDynamicObject.TryInvokeMember(
                                (InvokeMemberBinder)(object)InvokeMember,
                                new[] { arg1 },
                                out result)
                            )
                        {
                            return(result);
                        }
                    }
                    #endregion

                    Console.WriteLine("__CallSite __InvokeMemberBinder arg1 " + new { subject, arg1 });

                    // https://sites.google.com/a/jsc-solutions.net/work/knowledge-base/15-dualvr/20160103/oculus360photossdk
                    //dynamic xResources = getResources();

                    //// https://developer.android.com/reference/android/content/res/Resources.html
                    //java.lang.CharSequence text = xResources.getText(id);

                    throw new NotImplementedException("__CallSite __InvokeMemberBinder");
                }
                    );

                return(r);
            }
            #endregion

            #region (void)
            if (IsReturnVoid)
            {
                r = new Action <__CallSite, object>(
                    (site, subject) =>
                {
                    object result = null;

                    var x = subject as DynamicObject;
                    if (x != null)
                    {
                        if (x.TryInvokeMember(
                                (InvokeMemberBinder)(object)InvokeMember,
                                new object[0],
                                out result)
                            )
                        {
                            return;
                        }
                    }

                    // __CallSite __InvokeMemberBinder { subject = DIDIsoDepCertificate.Activities.ApplicationActivity@2057ddf8 }


                    Console.WriteLine("__CallSite __InvokeMemberBinder " + new { subject });



                    throw new NotImplementedException("__CallSite __InvokeMemberBinder");
                }
                    );

                return(r);
            }

            r = new Func <__CallSite, object, object>(
                (site, subject) =>
            {
                object result = null;

                #region xDynamicObject
                var xDynamicObject = subject as DynamicObject;
                if (xDynamicObject != null)
                {
                    if (xDynamicObject.TryInvokeMember(
                            (InvokeMemberBinder)(object)InvokeMember,
                            new object[0],
                            out result)
                        )
                    {
                        return(result);
                    }
                }
                #endregion

                Console.WriteLine("__CallSite __InvokeMemberBinder " + new { subject });


                throw new NotImplementedException("__CallSite __InvokeMemberBinder");
            }
                );

            return(r);

            #endregion
        }