c - Visual Studio : Callback function problem (__cdecl *)

标签 c visual-studio casting callback

我有一个在 Ubuntu 上运行良好的 C 应用程序,但我必须将其移植到 Visual Studio,这就是问题开始的地方。我正在使用 Visual Studio 2017,我的问题是我使用的回调函数。 在代码中,我必须注册两个回调函数(几乎相同的代码,只是一个用于发送数据,另一个用于接收数据)。

libusb_fill_bulk_transfer(recv_transfer_desc,         //transfer descriptor struct
        usb_dev_handle,             //usb device handle
        EP1_IN,                    //unsigned char
        in_buffer,                 //unsigned char*
        len,                        //tranfer length, int
        recv_transfer_finished_cb,  //callback func
        &my_recv_cb_data,           //void*, callback user data
        timeout);                 //unsigned int

这会出现以下错误:C2440 'function':无法从 'void (__cdecl *)(libusb_transfer *)' 转换为 'libusb_transfer_cb_fn'

我从来没有使用过VS,所以我真的不知道如何解决这个问题。对我来说,这似乎需要将某些东西类型转换成某些东西,但就是无法弄清楚。

这是我试图处理的回调函数的签名: static void recv_transfer_finished_cb(struct libusb_transfer *);

最佳答案

经过反复试验,我刚刚弄清楚了。

问题是VS中的默认调用是__cdecl,并且不能用于回调函数,回调函数必须是__stdcall

为了解决我的问题,我需要更改回调函数的签名: static void send_transfer_finished_cb(struct libusb_transfer *); 到: static void __stdcall send_transfer_finished_cb(struct libusb_transfer *);

关于c - Visual Studio : Callback function problem (__cdecl *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52371051/

相关文章:

c - 堆排序程序不返回结果

c# - 如何从编码的 UI 测试创建可执行文件(最好是 .exe 而不是命令行)?

visual-studio - Visual Studio F# 解决方案中配置文件的最佳实践

php - 在 php 中将派生类转换为基类

c - 既然void是空类型,为什么void*是可以指向任何类型对象的指针类型呢?

调用另一个文件中定义的 C 函数

c - 为什么我的C代码在拆分行时会崩溃

c++ - 如何从 Adob​​e AIR 应用程序获取 HDC 或屏幕截图?

php - 如何在 PHP 中将数组元素转换为字符串?

java - 为什么将原始类型转换为引用类型会产生编译错误?