c - 套接字io函数send()和recv()的函数指针

标签 c visual-studio-2010 sockets function-pointers winsock

所以我有一个名为 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/

相关文章:

c++ - 为什么要在套接字的 'recv' 方法上设置保守的最大字节大小?

c++ - 如何使用 WSASend() 和 IOCP 模拟阻塞 send()?

c++ - unsigned char 的按位运算

子进程在使用父进程将数据写入管道之前读取数据

c - 如何在 C 中使用 "popen"写入和读取同一文件

c++ - 错误 MSB8008 : Specified platform toolset (v120) is not installed or invalid

c++ - 在 VC++ 2008 项目中使用 VC++ 2010 运行时库

c++ - 查找数组中出现次数最多的值和中值 C++

c++ - _mm512_exp_pd 与 GNU 编译器

java - "Endless"来自套接字的 AudioInputStream