что такое __in и WSAAPI? - PullRequest
       2

что такое __in и WSAAPI?

6 голосов
/ 11 февраля 2011

Я видел в определении сокета в msdn следующее:

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

Что означает префикс "__in"?

и что такое WSAAPI?

Ответы [ 3 ]

4 голосов
/ 12 февраля 2011

__in (и друзья) определяют предполагаемое использование каждого параметра, так что вызовы этой функции могут быть механически проверены.

См. http://msdn.microsoft.com/en-us/library/aa383701(v=vs.85).aspx о том, как активировать проверку.

http://msdn.microsoft.com/en-us/library/ms235402.aspx описывает современную альтернативу.

WSAAPI распространяется на соглашение о вызовах, используемое для функций библиотеки сокетов.Это гарантирует, что код для вызовов функций генерируется правильно, даже если код вызова настроен на сборку с другим соглашением о вызовах.

4 голосов
/ 11 февраля 2011

Это макрос препроцессора, который определен как ничто.Цель состоит в том, чтобы объявить интерфейс так, чтобы пользователь интерфейса знал назначение аргументов функции (в терминах параметров ввода / вывода).

WSAAPI - имя для API сокетов Microsoft.Основан на розетках Беркли.

0 голосов
/ 13 октября 2016

Для тех, кто хочет найти соглашение о вызовах, чтобы они могли вызывать функции 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

_MSC_VER 800 - это Visual C ++ 1.0 , что является древним.

Похоже, что если вы пишете код Mac и определено _68K_, вы получаете соглашение о вызовах __pascal.Если вы используете Visual C ++> = 1.0 и разрабатываете для Windows, это соглашение о вызовах __stdcall.В противном случае это либо __stdcall, либо ничего, в зависимости от того, определен ли _STDCALL_SUPPORTED.

Таким образом, в основном WSAAPI, вероятно, оценивает __stdcall на вашем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...