Пример #1
0
 public static Handle InvokeMember(Handle type, [MarshalAs(UnmanagedType.BStr)] string name, BindingFlags bindingFlags, Handle binder, Handle target, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 6)] Handle[] providedArgs, uint argCount, out Handle exception)
 {
     try
     {
         Type     typeObj         = (Type)HandleTable.Get(type);
         Binder   binderObj       = (Binder)HandleTable.Get(binder);
         object   targetObj       = HandleTable.Get(target);
         object[] providedArgsObj = Array.ConvertAll(providedArgs, HandleTable.Get);
         object   result          = typeObj.InvokeMember(name, bindingFlags, binderObj, targetObj, providedArgsObj);
         exception = Handle.Zero;
         providedArgs.Zip(providedArgsObj, (h, o) => HandleTable.Set(h, o)).Count();
         if (result != null)
         {
             return(AddRef(result));
         }
         else
         {
             return(Handle.Zero);
         }
     }
     catch (Exception e)
     {
         exception = AddRef(e);
         return(Handle.Zero);
     }
 }
Пример #2
0
 private static object ReceiveInvocation(IntPtr context, object[] args)
 {
     for (int i = 0; i < args.Length; ++i)
     {
         HandleTable.Set(new IntPtr(i + 1), args[i]);
     }
     return(HandleTable.Get(handler(context, (uint)args.Length)));
 }
Пример #3
0
#pragma warning disable IDE0001
        public static Handle CreateArray(uint argCount)
        {
            object[] array = new object[argCount];
            for (uint i = 0; i < argCount; ++i)
            {
                array[i] = HandleTable.Get(new IntPtr(i + 1));
            }
            return(AddRef(array));
        }
Пример #4
0
        public static Handle GetObjectType(Handle handle)
        {
            var obj = HandleTable.Get(handle);

            if (obj == null)
            {
                return(Handle.Zero);
            }
            var type = obj.GetType();

            return(AddRef(type));
        }
Пример #5
0
 public static Handle CreateDelegate(Handle delegateType, IntPtr context, out Handle exception)
 {
     try
     {
         exception = Handle.Zero;
         var typeObj = (Type)HandleTable.Get(delegateType);
         return(AddRef(CompileHandlerInvocation(typeObj, args => ReceiveInvocation(context, args))));
     }
     catch (Exception e)
     {
         exception = AddRef(e);
         return(Handle.Zero);
     }
 }
Пример #6
0
        public static string GetString(Handle handle)
        {
            object obj = HandleTable.Get(handle);

            if (obj is string)
            {
                return((string)obj);
            }
            else
            {
                try
                {
                    return(obj.ToString());
                }
                catch (Exception)
                {
                    return(null);
                }
            }
        }
Пример #7
0
 internal static Handle AddRef(object obj)
 {
     return(HandleTable.Add(obj));
 }
Пример #8
0
        public static char GetChar(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is char?(char)value : (char)0);
        }
Пример #9
0
 public static Handle PutChar(Handle handle, char value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #10
0
#pragma warning restore IDE0001

        public static Handle PutString(Handle handle, [MarshalAs(UnmanagedType.BStr)] string value)
        {
            return(HandleTable.Set(handle, value));
        }
Пример #11
0
        public static uint GetUInt32(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is uint?(uint)value : 0);
        }
Пример #12
0
 public static Handle PutUInt16(Handle handle, ushort value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #13
0
 public static Handle PutInt8(Handle handle, sbyte value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #14
0
        public static ushort GetUInt16(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is ushort?(ushort)value : (ushort)0);
        }
Пример #15
0
 public static Handle PutFloat64(Handle handle, double value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #16
0
        public static float GetFloat32(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is float?(float)value : 0);
        }
Пример #17
0
 public static Handle PutFloat32(Handle handle, float value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #18
0
        public static ulong GetUInt64(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is ulong?(ulong)value : 0);
        }
Пример #19
0
 public static Handle Duplicate(Handle handle)
 {
     return(AddRef(HandleTable.Get(handle)));
 }
Пример #20
0
 public static Handle PutUInt64(Handle handle, ulong value)
 {
     return(HandleTable.Set(handle, value));
 }
Пример #21
0
 public static Handle PutBool(Handle handle, byte value)
 {
     return(HandleTable.Set(handle, value != 0));
 }
Пример #22
0
        public static byte GetBool(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is bool?(byte)((bool)value ? 1 : 0) : (byte)0);
        }
Пример #23
0
 public static Handle PutObject(Handle handle, Handle value)
 {
     return(HandleTable.Set(handle, HandleTable.Get(value)));
 }
Пример #24
0
        public static sbyte GetInt8(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is sbyte?(sbyte)value : (sbyte)0);
        }
Пример #25
0
 public static bool Release(Handle handle)
 {
     return(HandleTable.Remove(handle));
 }
Пример #26
0
        public static double GetFloat64(Handle handle)
        {
            var value = HandleTable.Get(handle);

            return(value is double?(double)value : 0);
        }
Пример #27
0
 public static Handle PutUInt32(Handle handle, uint value)
 {
     return(HandleTable.Set(handle, value));
 }