Ios BASS FX的Objective-C回调块
我正在尝试在我的应用程序中使用音频库BASS。我正在尝试使用一种方法,当它检测到音乐中的节拍时会触发回调 这是我当前的代码:Ios BASS FX的Objective-C回调块,ios,objective-c,objective-c-blocks,bass,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, my
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。您正在将一个返回
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);
有关函数指针的详细信息,请参阅。当typedef只需要
void
时,您的块将返回一个void*
。您的问题是什么?@Razib他在问为什么不能将其块作为回调传递。@Razib是的,对不起。我想知道如何改变块,使它将工作。我把空虚变成了空虚。这是新的错误消息:将“void(^)(DWORD,double,void)”传递给不兼容类型“BPMBEATPROC*”(也称为“void()(DWORD,double,void*))的参数)