public int InOpen(string deviceName) { int result = -1; int deviceID = GetInIdByName(deviceName); IntPtr pointer = Marshal.GetIUnknownForObject(this); midiProc = new MidiProc(CallBack); result = WinMM.midiInOpen(ref inHandle, deviceID, midiProc, pointer, CALLBACK_FUNCTION); if (result != 0) { throw new Exception("MidiInOpen failed with code: " + result + ". Cannot open IN device " + deviceName); } AddSysexBuffer(); result = WinMM.midiInStart(inHandle); if (result != 0) { throw new Exception("Cannot start IN device " + deviceName); } return(result); }