private static void TestResultFuncXEquals <T>(T value, Test_SimpleFuncs obj, int func, bool isNullResult) { UClass unrealClass = obj.GetClass(); string funcName = "ResultFunc" + func; if (isNullResult) { funcName += "_Null"; } UFunction func1 = unrealClass.FindFunctionByName(new FName(funcName)); Tests.AssertNotNull(func1, unrealClass, funcName); Tests.AssertEqual((T)UObject.DynamicInvoke(obj, funcName), value, unrealClass, funcName); }
private static void TestFuncX(Test_SimpleFuncs obj, UClass unrealClass, int func) { string funcName = "Func" + func; UFunction func1 = unrealClass.FindFunctionByName(new FName(funcName)); Tests.AssertNotNull(func1, unrealClass, funcName); Test_SimpleDelegate simpleDelegate = new Test_SimpleDelegate(); simpleDelegate.Bind(obj.BindMe); Test_SimpleMulticastDelegate multicastDelegate = new Test_SimpleMulticastDelegate(); multicastDelegate.Bind(obj.BindMeMulti1); multicastDelegate.Bind(obj.BindMeMulti2); // Use dynamic invoke so that all parameters go through a full marshal between C#/native code object[] parameters = { (sbyte)2, //sbyte (byte)3, //byte, (short)4, //short (ushort)5, //ushort (int)6, //int (uint)7, //uint (long)8, //long (ulong)9, //ulong (float)10.2f, //float (double)11.5, //double simpleDelegate, //delegate multicastDelegate, //multicast delegate obj, Test_SimpleEnum.Val3, new Test_FixedArrayInStruct() { Array1 = new sbyte[2] { 2, 5 } }, new TSubclassOf <UObject>(obj.GetClass()), new TLazyObject <UObject>(obj), TWeakObject <UObject> .Null, new TSoftClass <UObject>(obj.GetClass()), new TSoftObject <UObject>(obj), "Test123", new FName("321Test") }; long result = (long)UObject.DynamicInvoke(obj, funcName, parameters); Tests.AssertEqual(result, 13232, unrealClass, funcName + " result"); if (func > 1) { sbyte p1 = (sbyte)parameters[0]; byte p2 = (byte)parameters[1]; short p3 = (short)parameters[2]; ushort p4 = (ushort)parameters[3]; int p5 = (int)parameters[4]; uint p6 = (uint)parameters[5]; long p7 = (long)parameters[6]; ulong p8 = (ulong)parameters[7]; float p9 = (float)parameters[8]; double p10 = (double)parameters[9]; Test_SimpleDelegate p11 = (Test_SimpleDelegate)parameters[10]; Test_SimpleMulticastDelegate p12 = (Test_SimpleMulticastDelegate)parameters[11]; UObject p13 = (UObject)parameters[12]; Test_SimpleEnum p14 = (Test_SimpleEnum)parameters[13]; Test_FixedArrayInStruct p15 = (Test_FixedArrayInStruct)parameters[14]; TSubclassOf <UObject> p16 = (TSubclassOf <UObject>)parameters[15]; TLazyObject <UObject> p17 = (TLazyObject <UObject>)parameters[16]; TWeakObject <UObject> p18 = (TWeakObject <UObject>)parameters[17]; TSoftClass <UObject> p19 = (TSoftClass <UObject>)parameters[18]; TSoftObject <UObject> p20 = (TSoftObject <UObject>)parameters[19]; string p21 = (string)parameters[20]; FName p22 = (FName)parameters[21]; UClass actorClass = GetActorClass(); Tests.AssertEqual(p1, 3, unrealClass, funcName + ".p1"); Tests.AssertEqual(p2, 4, unrealClass, funcName + ".p2"); Tests.AssertEqual(p3, 5, unrealClass, funcName + ".p3"); Tests.AssertEqual(p4, 6, unrealClass, funcName + ".p4"); Tests.AssertEqual(p5, 7, unrealClass, funcName + ".p5"); Tests.AssertEqual(p6, 8u, unrealClass, funcName + ".p6"); Tests.AssertEqual(p7, 9, unrealClass, funcName + ".p7"); Tests.AssertEqual(p8, 10u, unrealClass, funcName + ".p8"); Tests.AssertEqual(p9, 11.2f, unrealClass, funcName + ".p9"); Tests.AssertEqual(p10, 12.5, unrealClass, funcName + ".p10"); Tests.Assert(!p11.IsBound, unrealClass, funcName + ".p11"); Tests.Assert(p12.IsBound, unrealClass, funcName + ".p12"); Tests.AssertEqual(p12.Count, 3, unrealClass, funcName + ".p12"); Tests.AssertEqual(p13, actorClass, unrealClass, funcName + ".p13"); Tests.AssertEqual(p14, Test_SimpleEnum.Val2, unrealClass, funcName + ".p14"); Tests.AssertEqual(p15.Array1[0], 2, unrealClass, funcName + ".p15"); Tests.AssertEqual(p15.Array1[1], 5, unrealClass, funcName + ".p15"); Tests.AssertEqual(p15.Array1[2], 100, unrealClass, funcName + ".p15"); Tests.AssertEqual(p16.Value, actorClass, unrealClass, funcName + ".p16"); Tests.AssertEqual(p17.Value, actorClass, unrealClass, funcName + ".p17"); Tests.AssertEqual(p18.Value, actorClass, unrealClass, funcName + ".p18"); Tests.AssertEqual(p19.Value, actorClass, unrealClass, funcName + ".p19"); Tests.AssertEqual(p20.Value, actorClass, unrealClass, funcName + ".p20"); Tests.AssertEqual(p21, "changed123", unrealClass, funcName + ".p21"); Tests.AssertEqual(p22, new FName("321changed"), unrealClass, funcName + ".p22"); } }