Как получить доступ к функции C из другой функции C в iOS
Я пытаюсь назначить функцию для AURenderCallback inputProc
int setupRemoteIO(audio unit etc){
inProc.inputProc = playerCallback
}
но он говорит, что playerCallback не объявлен в этой области, хотя playerCallback присутствует в том же файле и классе, что и setupRemoteIO.
Обратный звонок игрока выглядит так
static OSStatus playerCallback(void *inRefCon etc)
В чем может быть проблема?
1 ответ
В C вам необходимо объявить функцию перед ее первым использованием, т.е. выше в файле, чем точка, в которой вы пытаетесь использовать функцию. Вот почему включаемые файлы обычно сгруппированы в верхней части файла; все символы, объявленные в заголовках, будут доступны по всему коду во включаемом файле.
В этом случае это означает объявление вашего обратного вызова:
static OSStatus playerCallback(void *inRefCon etc);
должен появиться перед вашим setupRemoteIO()
функция, чтобы компилятор знал, что функция существует, когда вы ее используете.
Поскольку вы работаете на iOS, я также отмечу, что в последних компиляторах это ограничение не распространяется на методы Objective-C. Раньше: вы могли использовать только те селекторы методов, которые уже были видны. Но в более новых версиях Clang метод Objective-C может использовать селектор, объявленный позже в том же файле, без ошибок.