La API de Windows fue creado por primera vez en la década de 1980, y ha tenido que soportar varias arquitecturas de CPU y compiladores diferentes a lo largo de los años. Pasaron de los sistemas independientes de un solo usuario de un solo usuario a los sistemas multinúcleo de seguridad multinúcleo en red. Tuvieron que solucionar problemas con los procesadores de 16 bits frente a los de 32 bits, y ahora con los procesadores de 64 bits. Tuvieron que solucionar problemas con los compiladores anteriores a ANSI C. Tenían que soportar compiladores de C++ en los primeros tiempos no estandarizados. Tuvieron que lidiar con la memoria segmentada. Debían apoyar la internacionalización antes de que existiera Unicode. Tenían que admitir compatibilidad de nivel de fuente con MS-DOS, con OS/2 y con Mac OS. Han tenido que ejecutar varias generaciones de chips Intel, y PowerPC, y MIPS, y Alpha, y ARM. La misma API básica se utiliza para sistemas de escritorio, servidor, dispositivos móviles y sistemas integrados.
En la década de 1980, C se consideraba un lenguaje de alto nivel (sí, realmente!) y muchas personas consideraron que era bueno usar tipos abstractos en lugar de simplemente especificar todo como un primitivo int
, char
o void *
. Cuando no teníamos IntelliSense, infotips, navegadores de códigos, documentación en línea y similares, tales sugerencias de uso eran útiles, y facilitaban el código de puertos entre diferentes compiladores y diferentes lenguajes de programación.
Sí, es un lío horrible, pero eso no significa que hayan hecho algo mal.
No solo es C, sino que también tiene restos del gran cambio de Win16 (es decir, 16 bits) a Win32. Algunos de los tipos (en realidad # define's) también expresan aspectos de la infame notación húngara que también prevalecía en ese momento. Además, al ocultar los tipos reales detrás de los # define's, MS pudo soportar diferentes proveedores de compiladores de C; créanlo o no, había muchos proveedores diferentes de compiladores de C en aquel entonces. Olvidó nombres como Lattice C, Watcom C y muchos otros. Ahh .... los recuerdos. – kmontgom
UNIT es "unsigned int". –
WCHAR es un carácter * ancho *, UTF-16LE. Eso toma 2 bytes por personaje. Con eso en mente, probablemente puedas adivinar qué pasaría si intentaras usarlo como una matriz de caracteres común. –