using System; using director_voidNamespace; public class runme { private static void WaitForGC() { System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.Threading.Thread.Sleep(10); } static void Main() { runme r = new runme(); r.run(); } void run() { Caller caller = new Caller(); { DirectorVoidPointer dvp = new DirectorVoidPointer(5); int x = caller.callVirtualIn(dvp, 6); if (x != 106) throw new Exception("Fail1 should be 106, got " + x); global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut(); x = Caller.VoidToInt(ptr); if (x != 106) throw new Exception("Fail2 should be 106, got " + x); x = Caller.VoidToInt(dvp.voidPtrOut()); if (x != 106) throw new Exception("Fail3 should be 106, got " + x); } { DirectorVoidPointer dvp = new director_void_VoidPointer(5); int x = caller.callVirtualIn(dvp, 6); if (x != 12) throw new Exception("Fail1 should be 12, got " + x); global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut(); x = Caller.VoidToInt(ptr); if (x != 25) throw new Exception("Fail2 should be 25, got " + x); x = Caller.VoidToInt(dvp.voidPtrOut()); if (x != 1234) throw new Exception("Fail3 should be 1234, got " + x); } { DirectorVoidPointer dvp = new DirectorVoidPointer(10); int x = caller.callVirtualOut(dvp); if (x != 10) throw new Exception("Bad1 should be 10, got " + x); global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut(); x = dvp.nonVirtualVoidPtrIn(ptr); if (x != 110) throw new Exception("Bad2 should be 110, got " + x); } { DirectorVoidPointer dvp = new director_void_VoidPointer(10); int x = caller.callVirtualOut(dvp); if (x != 1234) throw new Exception("Bad3 should be 1234, got " + x); global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut(); x = dvp.nonVirtualVoidPtrIn(ptr); if (x != 1334) throw new Exception("Bad4 should be 1334, got " + x); } { MemberVoid mv = new MemberVoid(); global::System.IntPtr zero = global::System.IntPtr.Zero; mv.memberVariable = zero; zero = mv.memberVariable; } } } class director_void_VoidPointer : DirectorVoidPointer { public director_void_VoidPointer(int num) : base(num*num) { } public override int voidPtrIn(global::System.IntPtr p) { return Caller.VoidToInt(p) * 2; } public override global::System.IntPtr voidPtrOut() { setNewValue(1234); return nonVirtualVoidPtrOut(); } }