コード例 #1
0
        public void FromHandleTest()
        {
            using (var profile = Profile.CreatePlaceholder(null))
            {
                uint expectedFlag      = 0;
                uint expectedNChannels = 1;
                ScreeningChannel[] expectedChannels = new ScreeningChannel[16];
                expectedChannels[0].Frequency   = 2.0;
                expectedChannels[0].ScreenAngle = 3.0;
                expectedChannels[0].SpotShape   = SpotShape.Ellipse;

                // Act
                var    expected = new Screening(expectedFlag, expectedNChannels, expectedChannels);
                int    size     = Marshal.SizeOf(expected);
                IntPtr data     = Marshal.AllocHGlobal(size);
                Marshal.StructureToPtr(expected, data, false);
                try
                {
                    profile.WriteTag(TagSignature.Screening, data);
                    var tag = profile.ReadTag(TagSignature.Screening);

                    // Act
                    var target          = Screening.FromHandle(tag);
                    var actualFlag      = target.Flag;
                    var actualNChannels = target.nChannels;
                    var actualChannels  = target.Channels;

                    // Assert
                    Assert.AreEqual(expectedFlag, actualFlag);
                    Assert.AreEqual(expectedNChannels, actualNChannels);
                    for (int i = 0; i < 16; i++)
                    {
                        Assert.AreEqual(expectedChannels[i], actualChannels[i]);
                    }
                }
                finally
                {
                    Marshal.FreeHGlobal(data);
                }
            }
        }