socket io函数的函数指针send()和recv()

时间:2014-08-29 07:47:09

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

所以我有一个名为sockio()的函数,它接受Winsock 1.1中send()或recv()函数的函数指针,但是当我尝试将其作为函数指针类型的参数传递时出现错误iofunc,定义如下。

我似乎无法让它们匹配,所以它会让我传入send()或recv(),为什么会这样?

// 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 *)位有关?

1 个答案:

答案 0 :(得分:0)

您的typedef缺少调用约定,因此使用C的默认调用约定(通常为__cdecl)。 send()recv()使用__stdcall调用约定:

typedef int (__stdcall *iofunc)(SOCKET, const char*, size_t, int);