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