private static void TestFunctionPointer() { int expectedValue = 987654; int TestFunction() => expectedValue; Assert.True(ValidateDelegateReturnsExpected(expectedValue, TestFunction)); { TestDelegate localDelegate = TestFunction; Assert.True(ReplaceDelegate(expectedValue, ref localDelegate, out int newExpectedValue)); Assert.Equal(newExpectedValue, localDelegate()); } { GetNativeTestFunction(out TestDelegate test, out int value); Assert.Equal(value, test()); } { var returned = GetNativeTestFunctionReturned(out int value); Assert.Equal(value, returned()); } { CallbackWithExpectedValue cb = new CallbackWithExpectedValue { expectedValue = expectedValue, del = TestFunction }; Assert.True(ValidateCallbackWithValue(cb)); } { CallbackWithExpectedValue cb = new CallbackWithExpectedValue { expectedValue = expectedValue, del = TestFunction }; Assert.True(ValidateAndUpdateCallbackWithValue(ref cb)); Assert.Equal(cb.expectedValue, cb.del()); } { GetNativeCallbackAndValue(out CallbackWithExpectedValue cb); Assert.Equal(cb.expectedValue, cb.del()); } }
public static extern bool GetNativeCallbackAndValue(out CallbackWithExpectedValue val);
public static extern bool ValidateAndUpdateCallbackWithValue(ref CallbackWithExpectedValue val);