private static void TestIDispatch() { int expectedValue = 987654; int TestFunction() => expectedValue; Assert.True(ValidateDelegateValueMatchesExpected(expectedValue, TestFunction)); { TestDelegate localDelegate = TestFunction; Assert.True(ValidateDelegateValueMatchesExpectedAndClear(expectedValue, ref localDelegate)); Assert.Equal(null, localDelegate); } { TestDelegate localDelegate = TestFunction; Assert.True(DuplicateDelegate(expectedValue, localDelegate, out var outDelegate)); Assert.Equal(localDelegate, outDelegate); } { TestDelegate localDelegate = TestFunction; Assert.Equal(localDelegate, DuplicateDelegateReturned(localDelegate)); } { var cb = new DispatchDelegateWithExpectedValue { expectedValue = expectedValue, del = TestFunction }; Assert.True(ValidateStructDelegateValueMatchesExpected(cb)); } { var cb = new DispatchDelegateWithExpectedValue { expectedValue = expectedValue, del = TestFunction }; Assert.True(ValidateDelegateValueMatchesExpectedAndClearStruct(ref cb)); Assert.Equal(null, cb.del); } { var cb = new DispatchDelegateWithExpectedValue { expectedValue = expectedValue, del = TestFunction }; Assert.True(DuplicateStruct(cb, out var cbOut)); Assert.Equal(cbOut.expectedValue, cbOut.del()); } Assert.Throws <MarshalDirectiveException>(() => MarshalDelegateAsInterface(TestFunction)); }
public static extern bool ValidateDelegateValueMatchesExpectedAndClearStruct(ref DispatchDelegateWithExpectedValue dispatch);
public static extern bool DuplicateStruct(DispatchDelegateWithExpectedValue dispatchIn, out DispatchDelegateWithExpectedValue dispatchOut);
public static extern bool ValidateStructDelegateValueMatchesExpected(DispatchDelegateWithExpectedValue dispatch);