我正在使用一个 API,它要求我将函数指针作为回调传递。我正在尝试从我的 C++ 类中使用此 API,但出现编译错误。
API 定义为:
typedef void (__stdcall *STREAM_CALLBACK)(void *userdata);
__declspec(dllimport) int __stdcall set_stream_callback(
STREAM_CALLBACK streamCB, void *userdata);
第三方提供的一个示例文件是:
void __stdcall streamCB(void *userdata)
{
// callback implementation
}
int main(int argc, const char argv[])
{
int mid = 0;
set_stream_callback(streamCB, &mid);
}
这很好用。但是,当我尝试在课堂上使用它时,出现错误:
错误 C3867:“MyClass::streamCB”:函数调用缺少参数列表;使用 '&MyClass::streamCB' 创建指向成员的指针
使用建议
&MyClass::streamCB
不起作用。我知道 set_stream_callback 只接受非成员函数。
问题非常类似于 如何将类成员函数作为回调传递? 约翰内斯在其中提出了一个简洁的建议,但是我不太理解。如果我正确地认为它与这个问题有关,任何人都可以扩展一下吗?
我试过了:
void __stdcall MyClass::streamCB(void *userdata)
{
// callback implementation
}
static void MyClass::Callback( void * other_arg, void * this_pointer ) {
MyClass * self = static_cast<ri::IsiDevice*>(this_pointer);
self->streamCB( other_arg );
}
//and in the constructor
int mid = 0;
set_stream_callback(&MyClass::Callback, &mid);
但
错误 C2664:“set_stream_callback”:无法将参数 1 从“void (__cdecl *)(void *,void *)”转换为“STREAM_CALLBACK”
我该如何解决这个问题?
Edit1:另外,我想userdata
在streamCB
回调中使用。