如何将回调函数传递给 libusb 批量传递函数C++类
How to pass callback function to libusb bulk transfer function in C++ Class
我正在使用libusb与USB设备进行交互。我创建了一个类,一个成员函数将从设备接收输入并对其进行处理。我正在使用异步 api。现在 libusb_fill_bulk_transfer() 函数调用抛出编译错误:
void MyDeviceClass::on_connectButton_clicked()
{
int r; //for return values
ssize_t cnt; //holding number of devices in list
r = libusb_init(&ctx); //initialize the library for the session we just declared
if(r < 0) {
qDebug()<<"Init Error "<<r<<endl; //there was an error
return;
}
...
...
...
libusb_fill_bulk_transfer( transfer_in, dev_handle, USB_ENDPOINT_IN,
inBuffer, LEN_IN_BUFFER,readDataFromBuffer,NULL,0);
libusb_submit_transfer(transfer_in);
QtConcurrent::run (this,&MyDeviceClass::eventThread);
}
编译器建议使用 &MyDeviceClass::readDataFromBuffer 作为函数指针,但这仍然会引发错误。我尝试使用静态成员,甚至静态非成员函数,但都是徒劳的。请帮助我将回调传递给此函数。我正在使用Qt,可能不喜欢使用boost库。请注意,libusb_fill_bulk_transfer(...) 是在 MyDeviceClass 的成员函数中调用的。
我使成员函数静态,原型需要修改:
static void LIBUSB_CALL readDataFromBuffer(struct libusb_transfer *);
使用
非成员函数时编译错误是什么?
编辑:这应该是LIBUSB_CALL:
void LIBUSB_CALL BulkTransferCallback(struct libusb_transfer *transfer) {
// This assumes that you set transfer::user_data to be a pointer to
// an instance of the MyDeviceClass class.
MyDeviceClass* mdc = reinterpret_cast<MyDeviceClass*>(transfer->user_data);
mdc->onBulkTransferCallback(transfer);
}
然后,在设置指针时,请使用:
transfer.callback = &BulkTransferCallback;
正如你自己回答的那样,实际上它应该是__stdcall由LIBUSB_CALL定义的。 他们的文档应将此包含在函数指针 typedef 中,以消除歧义。
lib_usb API 定义函数libusb_fill_bulk_transfer:
static void libusb_fill_bulk_transfer (struct libusb_transfer *transfer, libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *buffer, int length, libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout)
可以将静态类函数添加到类并调用非静态成员函数此静态函数中的类。
你这个对象将在无效的地方*user_data。
在静态类函数中,您必须强制转换将>user_data正确转移到您的班级。
相关文章:
- 通过键入的引用问题传递函数
- 通过两个嵌套函数传递C++函数的名称
- 如何从模板类传递函数
- 从私有函数传递函数作为参数
- 如何通过模板传递函数?
- 传递函数指针时未解析的外部符号
- 传递函数指针代替插槽函数
- 如何在 arduino 中传递函数参数
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误
- 按引用传递函数参数
- 如何在类(C )中作为参数传递函数
- 在检查传递函数标识符时是否获得模板参数时遇到问题
- 在类之间传递函数指针
- 在C++中传递函数
- 为什么这是一个按指针传递函数
- 当指针具有可选参数时,如何传递函数指针
- C++模板在传递函数签名时未进行编译
- 是否可以通过引用传递函数对象
- C++传递函数作为具有多态类型的参数
- 如何将回调函数传递给 libusb 批量传递函数C++类