Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios BASS FX的Objective-C回调块_Ios_Objective C_Objective C Blocks_Bass - Fatal编程技术网

Ios BASS FX的Objective-C回调块

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

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

您正在将一个返回
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*))的参数)