-1

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

4

1 回答 1

0

您正在将一个返回 a 的块传递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);

有关函数指针的更多信息,请参阅C 中的函数指针如何工作?.

于 2015-01-30T20:31:39.740 回答