所以我有一个名为 sockio() 的函数,它接受 Winsock 1.1 中的 send() 或 receive() 函数的函数指针,但当我尝试将其中一个函数作为函数指针类型的参数传递时,出现错误iofunc,定义如下。
我似乎无法让它们匹配,这样它就可以让我传入 send() 或 receive(),这是为什么?
// my function pointer typedef
typedef int (*iofunc)(SOCKET, const char*, size_t, int);
// sockio function prototype
static int sockio(int socket, sockio_buf* buf, iofunc io);
这是当我尝试在 Visual C++ 2010 中编译时出现的错误:
1>c:\...\sockio.c(24): error C2440: 'function':
cannot convert from 'int (__stdcall *)(SOCKET,const char *,int,int)' to 'iofunc'
1>c:\...\sockio.c(24):
warning C4024: 'sockio': different types for formal and actual parameter 3
所有参数对我来说看起来都一样。它与 (__stdcall *) 位有关吗?
最佳答案
您的 typedef
缺少调用约定,因此使用 C 的默认调用约定(通常为 __cdecl
)。 send()
和 recv()
使用 __stdcall
调用约定:
typedef int (__stdcall *iofunc)(SOCKET, const char*, size_t, int);
关于c - 套接字io函数send()和recv()的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563814/