public void SafeArrayScopedAccessTest() { var 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})); d.Data.Write(new[] { 0, 1, 2, 3, 4 }); } 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(); }
public void SafeArrayAccessDataTest() { using (var 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)); } }