我在MSDN插座的定義看到以下內容:什麼是__in和WSAAPI?
SOCKET WSAAPI socket(
__in int af,
__in int type,
__in int protocol
);
什麼是前綴「__in」是什麼意思?
什麼是WSAAPI?
我在MSDN插座的定義看到以下內容:什麼是__in和WSAAPI?
SOCKET WSAAPI socket(
__in int af,
__in int type,
__in int protocol
);
什麼是前綴「__in」是什麼意思?
什麼是WSAAPI?
__in
(和朋友)指定每個參數的預期用途,以便可以機械地檢查對該函數的調用。
請參閱http://msdn.microsoft.com/en-us/library/aa383701(v=vs.85).aspx瞭解如何激活檢查。
http://msdn.microsoft.com/en-us/library/ms235402.aspx描述了現代的選擇。
WSAAPI
擴展到用於套接字庫函數的調用約定。這確保即使調用代碼設置爲使用不同的調用約定構建,也可以正確生成調用函數的代碼。
這是一個預處理宏,它被定義爲什麼都沒有。目的是聲明接口,以便接口的用戶知道函數參數的用途(根據輸入/輸出參數)。
WSAAPI是Microsoft的套接字API的名稱。它基於伯克利套接字。
對於那些希望找到調用約定,使他們能夠從另一個調用語言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。