PrivateInvoke() private method

private PrivateInvoke ( MessageData &msgData, int type ) : void
msgData MessageData
type int
return void
Beispiel #1
0
        internal object LoadRemoteFieldNew(IntPtr classPtr, IntPtr fieldPtr)
        {
            Mono.RuntimeClassHandle classHandle = new Mono.RuntimeClassHandle(classPtr);
            RuntimeFieldHandle      fieldHandle = new RuntimeFieldHandle(fieldPtr);
            RuntimeTypeHandle       typeHandle  = classHandle.GetTypeHandle();

            FieldInfo field = FieldInfo.GetFieldFromHandle(fieldHandle);

            if (InCurrentContext())
            {
                object o = _rp._server;
                return(field.GetValue(o));
            }

            object[] inArgs = new object[] { Type.GetTypeFromHandle(typeHandle).FullName,
                                             field.Name };
            object[]   outArgsMsg = new object[1];
            MethodInfo minfo      = typeof(object).GetMethod("FieldGetter", BindingFlags.NonPublic | BindingFlags.Instance);

            if (minfo == null)
            {
                throw new MissingMethodException("System.Object", "FieldGetter");
            }
            MonoMethodMessage msg = new MonoMethodMessage(minfo, inArgs, outArgsMsg);

            object[]  outArgs;
            Exception exc;

            RealProxy.PrivateInvoke(_rp, msg, out exc, out outArgs);
            if (exc != null)
            {
                throw exc;
            }
            return(outArgs[0]);
        }
Beispiel #2
0
        internal void StoreRemoteField(IntPtr classPtr, IntPtr fieldPtr, object arg)
        {
            Mono.RuntimeClassHandle classHandle = new Mono.RuntimeClassHandle(classPtr);
            RuntimeFieldHandle      fieldHandle = new RuntimeFieldHandle(fieldPtr);
            RuntimeTypeHandle       typeHandle  = classHandle.GetTypeHandle();
            FieldInfo field = FieldInfo.GetFieldFromHandle(fieldHandle);

            if (InCurrentContext())
            {
                object o = _rp._server;
                field.SetValue(o, arg);
                return;
            }

            string typeName  = Type.GetTypeFromHandle(typeHandle).FullName;
            string fieldName = field.Name;

            object [] inArgs = new object[] { typeName,
                                              fieldName,
                                              arg };
            MethodInfo minfo = typeof(object).GetMethod("FieldSetter", BindingFlags.NonPublic | BindingFlags.Instance);

            if (minfo == null)
            {
                throw new MissingMethodException("System.Object", "FieldSetter");
            }

            MonoMethodMessage msg = new MonoMethodMessage(minfo, inArgs, null);

            object [] outArgs;
            Exception exc;

            RealProxy.PrivateInvoke(_rp, msg, out exc, out outArgs);
            if (exc != null)
            {
                throw exc;
            }
        }