我试图在我的应用程序中使用音频库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。
答案 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?。