public MidiError SetParams(MidiThruConnectionParams connectionParams)
        {
            if (Handle == InvalidRef)
            {
                throw new ObjectDisposedException("MidiThruConnection");
            }
            if (connectionParams is null)
            {
                throw new ArgumentNullException(nameof(connectionParams));
            }

            using (var data = connectionParams.WriteStruct()) {
                var error = MIDIThruConnectionSetParams(Handle, data.Handle);
                return(error);
            }
        }
        public static MidiThruConnection Create(string persistentOwnerID, MidiThruConnectionParams connectionParams, out MidiError error)
        {
            MidiThruConnectionRef ret;

            using (var data = connectionParams.WriteStruct()) {
                var retStr = NSString.CreateNative(persistentOwnerID);
                error = MIDIThruConnectionCreate(retStr, data.Handle, out ret);
                NSString.ReleaseNative(retStr);
            }

            if (error != MidiError.Ok)
            {
                return(null);
            }

            return(new MidiThruConnection(ret));
        }
        public MidiThruConnectionParams?GetParams(out MidiError error)
        {
            if (Handle == InvalidRef)
            {
                throw new ObjectDisposedException("MidiThruConnection");
            }

            IntPtr ret;

            error = MIDIThruConnectionGetParams(Handle, out ret);
            if (error != MidiError.Ok || ret == IntPtr.Zero)
            {
                return(null);
            }
            using (var data = Runtime.GetNSObject <NSData> (ret, true)) {
                if (data is null)
                {
                    return(null);
                }
                var cnnParams = new MidiThruConnectionParams();
                cnnParams.ReadStruct(data);
                return(cnnParams);
            }
        }
        public static MidiThruConnection?Create(string persistentOwnerID, MidiThruConnectionParams connectionParams)
        {
            MidiError error;

            return(Create(persistentOwnerID, connectionParams, out error));
        }