2012-05-28 168 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方法可以使用稍後在同一文件中聲明的選擇器,而不會出錯。

相關問題