Документация для устройств UWP Midi в основном охватывает C #. В моем проекте C ++ / winrt я обнаружил, что Lambdas отлично работают для обработки событий, но я не могу получить ввод 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 выглядит действительным. Есть ли что-то еще, что нужно сделать, чтобы это стало активным?