Example #1
0
            /// <summary>Initializes a new instance of the <see cref="SafeArrayScopedAccessData"/> class using the array descriptor that holds the data.</summary>
            /// <param name="psa">An array descriptor created by SafeArrayCreate.</param>
            public SafeArrayScopedAccessData(SafeSafeArrayDescriptor psa)
            {
                var hr = SafeArrayAccessData(psa, out ppvData);

                hr.ThrowIfFailed();
                this.psa = psa;
            }
Example #2
0
        public void SafeArrayScopedAccessTest()
        {
            SafeSafeArrayDescriptor psa = SafeArrayCreateVector(VARTYPE.VT_I4, 0, 5);

            {
                /*for (int i = 0; i < 5; i++)
                 * {
                 *      var p = new SafeCoTaskMemHandle(16);
                 *      Marshal.GetNativeVariantForObject(i, (IntPtr)p);
                 *      Assert.That(SafeArrayPutElement(psa, new[] { i }, (IntPtr)p).Succeeded);
                 * }*/
                using (var d = new SafeArrayScopedAccessData(psa))
                {
                    //var a = d.Data.ToArray<int>(5);
                    //Assert.That(a, Is.EquivalentTo(new long[] {0, 1, 2, 3, 4}));
                    new[] { 0, 1, 2, 3, 4 }.MarshalToPtr(d.Data);
                }
                for (var i = 0; i < 5; i++)
                {
                    var p = new SafeCoTaskMemHandle(16);
                    Assert.That(SafeArrayGetElement(psa, new[] { i }, (IntPtr)p).Succeeded);
                    var oi = p.ToStructure <int>();
                    Assert.That(oi, Is.EqualTo(i));
                }
            }
            psa.Dispose();
        }
Example #3
0
        public void SafeArrayCreateExTest()
        {
            var saBound = new SAFEARRAYBOUND {
                cElements = 5
            };

            using (SafeSafeArrayDescriptor psa = SafeArrayCreateEx(VARTYPE.VT_I8, 1, ref saBound, IntPtr.Zero))
                SafeArrayMethodTest <long>(psa, 5);
        }
Example #4
0
 private static void SafeArrayMethodTest <T>(SafeSafeArrayDescriptor psa, int count)
 {
     Assert.That(psa, Is.Not.EqualTo(IntPtr.Zero));
     Assert.That(SafeArrayGetDim(psa), Is.EqualTo(1));
     Assert.That(SafeArrayGetElemsize(psa), Is.EqualTo(Marshal.SizeOf <T>()));
     Assert.That(SafeArrayGetLBound(psa, 1, out var b).Succeeded);
     Assert.That(b, Is.EqualTo(0));
     Assert.That(SafeArrayGetUBound(psa, 1, out var u).Succeeded);
     Assert.That(u, Is.EqualTo(count - 1));
 }
Example #5
0
 public void SafeArrayAccessDataTest()
 {
     using (SafeSafeArrayDescriptor psa = SafeArrayCreateVector(VARTYPE.VT_I8, 0, 5))
     {
         Assert.That(SafeArrayAccessData(psa, out var pData).Succeeded);
         Assert.That(pData, Is.Not.EqualTo(IntPtr.Zero));
         Assert.That(SafeArrayUnaccessData(psa).Succeeded);
         using (var d = new SafeArrayScopedAccessData(psa))
             Assert.That(d.Data, Is.Not.EqualTo(IntPtr.Zero));
     }
 }
Example #6
0
 public void SafeArrayGetPutElementTest()
 {
     using (SafeSafeArrayDescriptor psa = SafeArrayCreateVector(VARTYPE.VT_I4, 0, 5))
     {
         for (var i = 0; i < 5; i++)
         {
             var p = SafeCoTaskMemHandle.CreateFromStructure(i);
             Assert.That(SafeArrayPutElement(psa, new[] { i }, (IntPtr)p).Succeeded);
         }
         for (var i = 0; i < 5; i++)
         {
             var p = SafeCoTaskMemHandle.CreateFromStructure <int>();
             Assert.That(SafeArrayGetElement(psa, new[] { i }, (IntPtr)p).Succeeded);
             var oi = p.ToStructure <int>();
             Assert.That(oi, Is.EqualTo(i));
         }
     }
 }
 public static extern HRESULT SafeArrayAccessData(SafeSafeArrayDescriptor psa, out IntPtr ppvData);
 public static extern HRESULT SafeArrayUnaccessData(SafeSafeArrayDescriptor psa);
 public static extern HRESULT SafeArrayPutElement(SafeSafeArrayDescriptor psa, [MarshalAs(UnmanagedType.LPArray)] int[] rgIndicies, [In] IntPtr pv);
Example #10
0
 public static extern HRESULT SafeArrayGetUBound(SafeSafeArrayDescriptor psa, uint nDim, out int plUbound);
Example #11
0
 public static extern int SafeArrayGetElemsize(SafeSafeArrayDescriptor pSafeArray);
Example #12
0
 public static extern uint SafeArrayGetDim(SafeSafeArrayDescriptor psa);
Example #13
0
 public void SafeArrayCreateVectorTest()
 {
     using (SafeSafeArrayDescriptor psa = SafeArrayCreateVector(VARTYPE.VT_I8, 0, 5))
         SafeArrayMethodTest <long>(psa, 5);
 }