BASS FX的Objective-C回调块

时间:2015-01-30 20:21:28

标签: ios objective-c objective-c-blocks bass

我试图在我的应用程序中使用音频库BASS。我尝试使用一种方法,当它在音乐中检测到节拍时触发回调。

这是我目前的代码:

void* (^myBlock)(DWORD, double, void *) = ^(DWORD handle, double time, void *user) {
    return nil;
};

BASS_FX_BPM_BeatDecodeGet(bpmStream, 0.0, playBackDuration, BASS_FX_BPM_BKGRND, myBlock,NULL);

回调在头文件中定义为:

typedef void (CALLBACK BPMBEATPROC)(DWORD chan, double beatpos, void *user);

错误消息是:

Passing 'void *(^)(DWORD, double, void *)' to parameter of incompatible type 'BPMBEATPROC *' (aka 'void (*)(DWORD, double, void *)')

我非常确定该块只需要一点修改,但我不熟悉Objective-C。

1 个答案:

答案 0 :(得分:0)

您正在将一个返回void*的块传递给一个参数,该参数需要一个不返回任何内容的函数指针(void)。

您需要将块声明为返回void的函数并将其作为回调传递:

void myFunction(DWORD handle, double time, void *user) {
    //function code here
}

然后将其传递给库,就像块一样:

BASS_FX_BPM_BeatDecodeGet(bpmStream, 0.0, playBackDuration, BASS_FX_BPM_BKGRND, myFunction,NULL);

有关函数指针的更多信息,请参阅How do function pointers in C work?