7 Stimmen

Was sind __in und WSAAPI?

Ich habe in der Definition eines Sockels in msdn folgendes gesehen:

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

Was bedeutet die Vorsilbe "__in"?

und was ist WSAAPI?

4voto

Zac Howland Punkte 15505

Es handelt sich um ein Präprozessormakro, das als Nichts definiert ist. Der Zweck besteht darin, die Schnittstelle zu deklarieren, damit der Benutzer der Schnittstelle den Zweck der Funktionsargumente (im Sinne von Eingabe-/Ausgabeparametern) kennt.

WSAAPI ist der Name für die Socket-API von Microsoft. Sie basiert auf Berkeley-Sockets.

4voto

__in (und Freunde) geben den Verwendungszweck jedes Parameters an, so dass die Aufrufe dieser Funktion mechanisch überprüft werden können.

Véase http://msdn.microsoft.com/en-us/library/aa383701(v=vs.85).aspx wie Sie die Prüfung aktivieren können.

http://msdn.microsoft.com/en-us/library/ms235402.aspx beschreibt die moderne Alternative.

WSAAPI erweitert die Aufrufkonvention, die für die Funktionen der Socket-Bibliothek verwendet wird. Dadurch wird sichergestellt, dass der Code für Funktionsaufrufe korrekt generiert wird, auch wenn der aufrufende Code so eingestellt ist, dass er mit einer anderen Aufrufkonvention erstellt wird.

0voto

Millie Smith Punkte 4476

Für diejenigen, die die Aufrufkonvention suchen, um WSAAPI-Funktionen von einer anderen Sprache aus aufrufen zu können, ist WSAAPI in Winsock2.h definiert als:

#define WSAAPI                  FAR PASCAL

Dann in 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

Ein _MSC_VER von 800 ist Visual C++ 1.0 die sehr alt ist.

Es sieht also so aus, dass Sie, wenn Sie Mac-Code schreiben und _68K_ definiert ist, die __pascal-Aufrufkonvention erhalten. Wenn Sie Visual C++ >= 1.0 verwenden und für Windows entwickeln, ist es die __stdcall-Aufrufkonvention. Ansonsten ist es entweder __stdcall oder nichts, je nachdem, ob _STDCALL_SUPPORTED definiert ist.

WSAAPI wird also auf Ihrem Rechner wahrscheinlich als __stdcall ausgewertet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X