2012-05-28 112 views
0

我想要的功能分配给AURenderCallback inputProc如何从另一个C函数访问C函数中的iOS

int setupRemoteIO(audio unit etc){ 
    inProc.inputProc = playerCallback 
}  

,但它说,playerCallback未在此范围内声明虽然playerCallback出现在与setupRemoteIO相同的文件和类。

玩家回调是这样

static OSStatus playerCallback(void *inRefCon etc) 

可能是什么问题呢?

+4

'playerCallback()'在文件中声明了_before_'setupRemoteIO()'吗? – 2012-05-28 07:18:04

+2

将c函数原型放在头文件或可见的类扩展中可能是个好主意。 –

+0

@格拉汉姆:事实并非如此。非常感谢!! – Namratha

回答

2

在C语言中,您需要在第一次使用之前声明一个函数,即在文件中比在尝试使用该函数的位置更高。这就是为什么包含文件通常聚集在文件顶部的原因;在头文件中声明的所有符号将在包含文件中的所有代码中可用。

在这种情况下,这意味着你的回调声明:

static OSStatus playerCallback(void *inRefCon etc); 

setupRemoteIO()功能之前,必须出现,使编译器知道你什么时候使用它的功能存在。当你在iOS上时,我也会指出,在最近的编译器中这个限制并不是适用于Objective-C方法。它曾经是:你只能使用已经看过的方法选择器。但在更新的Clang版本中,Objective-C方法可以使用稍后在同一文件中声明的选择器,而不会出错。

相关问题