public static ItemPropertyValue[] ReadItemPropertyValues(int size, IntPtr dataPtr, IntPtr errorsPtr) { try { var results = new ItemPropertyValue[size]; var dataPtrAsLong = dataPtr.ToInt64(); for (var i = 0; i < size; i++) { var valuePtr = new IntPtr(dataPtrAsLong + i * NativeMethods.VariantSize); if (valuePtr != IntPtr.Zero) { results[i].Value = Marshal.GetObjectForNativeVariant(valuePtr); NativeMethods.VariantClear(valuePtr); } results[i].Error = Marshal.ReadInt32(errorsPtr, i * sizeof(int)); } return results; } finally { if (dataPtr != IntPtr.Zero) Marshal.FreeCoTaskMem(dataPtr); if (errorsPtr != IntPtr.Zero) Marshal.FreeCoTaskMem(errorsPtr); } }
public static ItemPropertyValue[] ReadItemPropertyValues(int size, IntPtr dataPtr, IntPtr errorsPtr) { try { var results = new ItemPropertyValue[size]; var dataPtrAsLong = dataPtr.ToInt64(); for (var i = 0; i < size; i++) { var valuePtr = new IntPtr(dataPtrAsLong + i * NativeMethods.VariantSize); if (valuePtr != IntPtr.Zero) { results[i].Value = Marshal.GetObjectForNativeVariant(valuePtr); NativeMethods.VariantClear(valuePtr); } results[i].Error = Marshal.ReadInt32(errorsPtr, i * sizeof(int)); } return(results); } finally { if (dataPtr != IntPtr.Zero) { Marshal.FreeCoTaskMem(dataPtr); } if (errorsPtr != IntPtr.Zero) { Marshal.FreeCoTaskMem(errorsPtr); } } }