所以我有一个名为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 *)位有关?
答案 0 :(得分:0)
您的typedef
缺少调用约定,因此使用C的默认调用约定(通常为__cdecl
)。 send()
和recv()
使用__stdcall
调用约定:
typedef int (__stdcall *iofunc)(SOCKET, const char*, size_t, int);