Документация для устройств UWP Midi в основном охватывает C#. В моем проекте C++/winrt я обнаружил, что лямбда-выражения отлично подходят для обработки событий, но таким образом я не могу получить входные данные Midi.
По аналогии с другими обработчиками, которые хорошо работают, я пробовал следующее, но обработчик никогда не вызывается, даже если порт ввода указан и выбран.
m_midi_in_port.MessageReceived([&](winrt::Windows::Devices::Midi::IMidiInPort, MidiMessageReceivedEventArgs const& args)
{
winrt::Windows::Devices::Midi::IMidiMessage message = args.Message();
ReceivedInput(message);
});
[Обновление] Другой способ — зарегистрироваться на событие, используя ссылку на обработчик. Он скомпилируется и запустится, если я объявлю статический обработчик (ранее я не мог этого сделать, потому что не понимал, что обработчик должен быть статическим):
static void InputEventHandler(winrt::Windows::Devices::Midi::IMidiInPort inputPort, winrt::Windows::Devices::Midi::MidiMessageReceivedEventArgs args);
а затем зарегистрируйтесь таким образом после получения входного порта от DevInfo:
m_event_token = m_midi_in_port.MessageReceived(&InputEventHandler);
Но снова обработчик никогда не вызывается, хотя устройство ввода обнаружено и указано в списке, а inputPort кажется действительным. Есть ли что-то еще, что нужно сделать, чтобы это стало активным?