我正在尝试为 AURenderCallback inputProc 分配一个函数
int setupRemoteIO(audio unit etc){
inProc.inputProc = playerCallback
}
但它说 playerCallback 没有在此范围内声明,尽管 playerCallback 存在于与 setupRemoteIO 相同的文件和类中。
播放器回调是这样的
static OSStatus playerCallback(void *inRefCon etc)
可能是什么问题?
最佳答案
在 C 中,您需要在函数首次使用之前声明它,即在文件中比您尝试使用该函数的位置更高的位置。这就是为什么包含文件通常聚集在文件顶部的原因; header 中声明的所有符号都将在包含文件的整个代码中可用。
在这种情况下,这意味着您的回调声明:
static OSStatus playerCallback(void *inRefCon etc);
必须出现在您的 setupRemoteIO()
函数之前,以便编译器在您使用它时知道该函数存在。
由于您使用的是 iOS,我还会指出,在最近的编译器中,此限制并不适用于 Objective-C 方法。它曾经是:你只能使用已经见过的方法选择器。但是在较新版本的 Clang 中,Objective-C 方法可以使用稍后在同一文件中声明的选择器而不会出错。
关于ios - 如何从 iOS 中的另一个 C 函数访问 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780625/