private static void SafeArrayMethodTest <T>(SafeSAFEARRAY 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(typeof(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)); }
public void PROPVARIANTArrayTest() { // Setup SAFEARRAY var array = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4); // Add it to a PV using var pv = new PROPVARIANT(sa, VarEnum.VT_ARRAY | VarEnum.VT_I4); Assert.That(PropVariantGetElementCount(pv), Is.EqualTo(array.Length)); Assert.That(PropVariantGetInt32Elem(pv, 5, out var iVal), ResultIs.Successful); Assert.That(iVal, Is.EqualTo(array[5])); // Check GetValue func Assert.That(pv.parray, Is.EquivalentTo(array)); }
public void SafeSAFEARRAYConvert1DimTest() { // Setup SAFEARRAY var array = new int[] { 1, 2, 3, 4 }; using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4); Assert.That(sa.Length, Is.EqualTo(array.Length)); Assert.That(sa.Rank, Is.EqualTo(array.Rank)); var toarray = sa.ToArray(); Assert.That(toarray, Is.EquivalentTo(array)); var i = sa.GetValue <int>(3); Assert.That(i, Is.EqualTo(array[3])); sa.SetValue(i + 10, 3); Assert.That(sa.GetValue <int>(3), Is.EqualTo(i + 10)); Assert.That(sa.GetValue(3), Is.EqualTo(i + 10)); }
public void SafeSAFEARRAYConvertMultDimTest() { // Setup SAFEARRAY var array = new int[2, 3, 4] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }, { { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } } }; using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4); Assert.That(sa.Length, Is.EqualTo(array.Length)); Assert.That(sa.Rank, Is.EqualTo(array.Rank)); var toarray = sa.ToArray(); Assert.That(toarray, Is.EquivalentTo(array)); var i = sa.GetValue <int>(1, 2, 3); Assert.That(i, Is.EqualTo(array[1, 2, 3])); sa.SetValue(i + 10, 1, 2, 3); Assert.That(sa.GetValue <int>(1, 2, 3), Is.EqualTo(i + 10)); Assert.That(sa.GetValue(1, 2, 3), Is.EqualTo(i + 10)); }