gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:28:26 27 4
gpt4 key购买 nike

我有一个在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com