示例#1
0
    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);