Objective-C BASS FX 的回调块

Objective-C callback block for BASS FX

我正在尝试在我的应用程序中使用音频库 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。

您正在将 returns 一个 void* 的块传递给一个参数,该参数需要一个 returns 什么都没有的函数指针 (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?