2011-02-11 117 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。