2011-02-11 24 views
5

我在MSDN插座的定义看到以下内容:什么是__in和WSAAPI?

SOCKET WSAAPI socket(
    __in int af, 
    __in int type, 
    __in int protocol 
); 

什么是前缀“__in”是什么意思?

什么是WSAAPI?

回答

4

这是一个预处理宏,它被定义为什么都没有。目的是声明接口,以便接口的用户知道函数参数的用途(根据输入/输出参数)。

WSAAPI是Microsoft的套接字API的名称。它基于伯克利套接字。

0

对于那些希望找到调用约定,使他们能够从另一个调用语言WSAAPI功能,WSAAPI在Winsock2.h被定义为:

#define WSAAPI     FAR PASCAL 

然后在minwindef.h:

#define FAR     far 
#define far 

#if (!defined(_MAC)) && ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)) 
#define pascal __stdcall 
#else 
#define pascal 
#endif 

#ifdef _MAC 
#ifdef _68K_ 
#define PASCAL  __pascal 
#else 
#define PASCAL 
#endif 
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) 
#define PASCAL  __stdcall 
#else 
#define PASCAL  pascal 
#endif 

800的_MSC_VER是Visual C++ 1.0,这是古老的。

因此,看起来如果您正在编写Mac代码并定义了_68K_,您将获得__pascal调用约定。如果您使用Visual C++> = 1.0并为Windows开发,则是__stdcall调用约定。否则,它可能是__stdcall或者什么都不是,这取决于_STDCALL_SUPPORTED是否被定义。

因此,基本上WSAAPI可能会在您的机器上评估为__stdcall。