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?
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?
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.
__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.
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 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.