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