private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] value, char fmt) { var stringArray = IntPtr.Zero; int rc; try { if (value != null) { var intPtrArray = value.Select(_ => { var byteArray = _ ?? new byte[0]; var valPtr = Marshal.AllocHGlobal(byteArray.Length + 1); Marshal.Copy(byteArray, 0, valPtr, byteArray.Length); Marshal.WriteByte(valPtr, byteArray.Length, 0); return(valPtr); }).Concat(new[] { IntPtr.Zero }).ToArray(); stringArray = MarshalUtils.WriteIntPtrArray(intPtrArray); } rc = LdapNative.Instance.ber_printf_berarray(berElement, new string(fmt, 1), stringArray); } finally { MarshalUtils.FreeIntPtrArray(stringArray); } return(rc); }
private static void FreeControls(IntPtr controlArray) { foreach (var ptr in MarshalUtils.GetPointerArray(controlArray)) { var ctrl = Marshal.PtrToStructure <Native.Native.LdapControl>(ptr); FreeManagedControl(ctrl); } MarshalUtils.FreeIntPtrArray(controlArray); }