public static MidiThruConnection[] Find(string persistentOwnerID, out MidiError error) { if (persistentOwnerID == null) { throw new ArgumentNullException(nameof(persistentOwnerID)); } IntPtr ret; using (var nssstr = new NSString(persistentOwnerID)) { error = MIDIThruConnectionFind(nssstr.Handle, out ret); } using (var data = Runtime.GetNSObject <NSData> (ret)) { var typeSize = Marshal.SizeOf(typeof(MidiThruConnectionRef)); var totalObjs = (int)data.Length / typeSize; if (totalObjs == 0) { return(null); } var basePtr = data.Bytes.ToInt32(); var connections = new MidiThruConnection[totalObjs]; for (int i = 0; i < totalObjs; i++) { connections[i] = new MidiThruConnection((uint)(basePtr + i * typeSize)); } return(connections); } }
public static MidiThruConnection[]? Find(string persistentOwnerID, out MidiError error) { if (persistentOwnerID is null) { throw new ArgumentNullException(nameof(persistentOwnerID)); } IntPtr ret; var persistentOwnerIDHandle = CFString.CreateNative(persistentOwnerID); try { error = MIDIThruConnectionFind(persistentOwnerIDHandle, out ret); } finally { CFString.ReleaseNative(persistentOwnerIDHandle); } using (var data = Runtime.GetNSObject <NSData> (ret)) { if (data is null) { return(null); } var typeSize = Marshal.SizeOf(typeof(MidiThruConnectionRef)); var totalObjs = (int)data.Length / typeSize; if (totalObjs == 0) { return(null); } var connections = new MidiThruConnection[totalObjs]; unsafe { uint *handles = (uint *)(IntPtr)data.Bytes; for (int i = 0; i < totalObjs; i++) { connections [i] = new MidiThruConnection(handles [i]); } } return(connections); } }