예제 #1
0
        /*
         * static public TType Cast<TType>(object Value)
         * {
         *      if (typeof(TType) == typeof(int)) return (TType)(dynamic)Convert.ToInt32(Value);
         *      if (typeof(TType) == typeof(uint)) return (TType)(dynamic)Convert.ToUInt32(Value);
         *
         *      if (Value.GetType() == typeof(int)) return (TType)(dynamic)(int)Value;
         *      if (Value.GetType() == typeof(uint)) return (TType)(dynamic)(uint)Value;
         *      return (TType)(dynamic)Value;
         * }
         */

        static public object[] GetObjectsFromArgsIterator(ArgIterator ArgIterator)
        {
            var Params = new object[ArgIterator.GetRemainingCount()];

            for (int n = 0; n < Params.Length; n++)
            {
                Params[n] = TypedReference.ToObject(ArgIterator.GetNextArg());
            }
            ArgIterator.End();
            return(Params);
        }
예제 #2
0
    // Helper method for "TestArgIteratorEnd".
    private void TestEnd(String testNum, __arglist)
    {
        ArgIterator iter = new ArgIterator(__arglist);

        iter.End();
        AssertEquals("Remaining " + testNum, 0,
                     iter.GetRemainingCount());
        try
        {
            iter.GetNextArg();
            Fail("EndCheck " + testNum);
        }
        catch (InvalidOperationException)
        {
            // We expect this exception at the end of the list.
        }
    }
예제 #3
0
        public void GetArgIterator(object a, __arglist)
        {
            RuntimeArgumentHandle handle = __arglist;

            GetArgIterator(1, __arglist(handle));
            ArgIterator       args = new ArgIterator(handle);
            TypedReference    tr   = args.GetNextArg();
            RuntimeTypeHandle runtimeTypeHandle = TypedReference.TargetTypeToken(tr);
            ModuleHandle      mh    = runtimeTypeHandle.GetModuleHandle();
            IntPtr            mhPtr = runtimeTypeHandle.Value;

            var targetType  = TypedReference.GetTargetType(tr);
            var typedObject = TypedReference.ToObject(tr);



            args.End();
        }
        private static object[] GetAllArgs(Object arg0, Object arg1, Object arg2, Object arg3, __arglist)
        {
            ArgIterator args     = new ArgIterator(__arglist);
            int         argCount = args.GetRemainingCount() + 4;

            object[] objArgs = new Object[argCount];

            // Handle the hard-coded arguments
            objArgs[0] = arg0;
            objArgs[1] = arg1;
            objArgs[2] = arg2;
            objArgs[3] = arg3;

            // Walk all of the args in the variable part of the argument list.
            for (int i = 4; i < argCount; i++)
            {
                objArgs[i] = TypedReference.ToObject(args.GetNextArg());
            }
            args.End();

            return(objArgs);
        }
예제 #5
0
        public static void Write(this Stream output, __arglist)
        {
            ArgIterator iter = new ArgIterator(__arglist);

            try{
                while (iter.GetRemainingCount() > 0)
                {
                    TypedReference tr     = iter.GetNextArg();
                    Type           t      = __reftype(tr);
                    int            size   = Marshal.SizeOf(t);
                    byte[]         buffer = new byte[size];
                    IntPtr         ptr    = Marshal.AllocHGlobal(size);
                    try{
                        InteropTools.StructureToPtrDirect(tr, ptr, size);
                        Marshal.Copy(ptr, buffer, 0, size);
                        output.Write(buffer, 0, size);
                    }finally{
                        Marshal.FreeHGlobal(ptr);
                    }
                }
            }finally{
                iter.End();
            }
        }
	// Helper method for "TestArgIteratorEnd".
	private void TestEnd(String testNum, __arglist)
			{
				ArgIterator iter = new ArgIterator(__arglist);
				iter.End();
				AssertEquals("Remaining " + testNum, 0,
							 iter.GetRemainingCount());
				try
				{
					iter.GetNextArg();
					Fail("EndCheck " + testNum);
				}
				catch(InvalidOperationException)
				{
					// We expect this exception at the end of the list.
				}
			}