мои навыки C ++ довольно легки, но мне удается сделать что-то - пока я не наткнулся на стену.Текущая стена:
Я использую CoreAudio, чтобы сделать некоторые вещи с воспроизведением Midi.У меня есть много работы, но я застрял на простой вещи.(Я не знаю правильной терминологии C ++, так что терпите меня ...).
Я использую функцию обратного вызова рендеринга в CoreAudio, чтобы указать, когда событие midi note обрабатывается AU.Если я определяю ее как неклассовую функцию и вставляю ее в main.cpp (или в этом случае testApp.cpp), она работает - я получаю события.Проблема в том, что мне нужно, чтобы экземпляр testApp получал эти события.
Итак ... есть ли способ получить экземпляр testApp из main.cpp, чтобы я мог вызвать метод testApp Iнужно?
ИЛИ есть ли в C ++ вуду, чтобы функция, не относящаяся к классу, находилась внутри класса, вызывая метод экземпляра?Например, если приведенная ниже функция относится к моему классу, как она может вызывать метод для экземпляра класса ...
OSStatus renderCallback(void *inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData)
{
someClassMethod(); // doesn't work
this.someClassMethod(); // doesn't work
self.someClassMethod(); // doesn't work
}
Не знаю точно, но я думаю, что материал CoreAudio нене принимать методы экземпляра в качестве обратных вызовов - по крайней мере, это то, что я почерпнул из сообщения об ошибке (ниже).Я в порядке, все равно это работает.
спасибо за любые советы!
ошибка: аргумент типа OSStatus (testApp ::) (void *, AudioUnitRenderActionFlags *, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList *) 'не соответствует' OSStatus () (void , AudioUnitRenderActionFlags *, const AudioTimeStamp *, UInt32, UInt32, AudioBufferList *)