Пытаюсь открыть вход в PortMidi

Я пытаюсь открыть миди-порт для чтения событий с миди-клавиатуры на С++ с помощью PortMidi. Я нашел идентификатор устройства для клавиатуры с помощью GetDeviceInfo, но не могу открыть ввод.

Функция выглядит следующим образом:

    Pm_OpenInput    (   PortMidiStream **   stream,
                        PmDeviceID  inputDevice,
                        void *  inputDriverInfo,
                        long    bufferSize,
                        PmTimeProcPtr   time_proc,
                        void *  time_info    
                    )   

Полная документация по этой функции находится здесь

И моя реализация...

PortMidiStream **stream;
Pm_OpenInput(stream, 12, NULL, 128, NULL, NULL);

..выдает ошибку

Ошибка проверки во время выполнения № 3. Переменная 'stream' используется без инициализации.

.. что достаточно верно, так как я не инициализировал его. Я просмотрел PortMidi.h и большую часть Интернета, пытаясь найти PortMidiStream и как его инициализировать, но безуспешно. В заголовочном файле есть только typedef и комментарий, говорящий

Один PortMidiStream — это дескриптор открытого MIDI-устройства.

что мало помогло.

Любые идеи приветствуются

Иордания

P.S. Вот страница загрузки PortMidi http://sourceforge.net/apps/trac/portmedia/wiki/portmidi


person jordanwise    schedule 28.06.2011    source источник


Ответы (1)


В документации указано

stream — это адрес указателя PortMidiStream, который получит указатель на только что открытый поток.

Поэтому измените свой код, чтобы он делал именно то, что он говорит.

PortMidiStream *stream; /* A PortMidiStream pointer */
Pm_OpenInput(&stream, 12, NULL, 128, NULL, NULL); /* Pass the address of the pointer */

Это распространенная идиома в C для возврата значений указателя.

person zinglon    schedule 28.06.2011