API de MS Windows
§1 WinAPI
La interfaz de programación de los sistemas Windows de Microsoft se concreta en varios centenares de funciones C/C++, que pueden ser invocadas para acceder a los servicios más variados, y que a veces aceptan gran cantidad de argumentos [0]. Estas funciones se conocen con el nombre genérico de WinAPI, más concretamente Win16 si se refiere a los antiguos sistemas de 16 bits, y Win32 si se refiere a los Windows 95 y posteriores, que pueden utilizar direcciones de memoria de 32 bits [1].
La mayoría de funciones de la API se agrupan en librerías que
adoptan forma de ficheros; generalmente con terminación .DLL
(Dynamic Linked Library
1.4.4b), aunque las hay
también tipo .EXE.
Dato que Windows es fundamentalmente un sistema gráfico, una parte fundamental de sus habilidades están dedicadas al dibujo en dispositivos de este tipo. Básicamente pantallas, aunque también pueden ser impresoras y trazadores ("plotters"). Este subsistema es conocido como GDI ("Graphics Device Interface").
Nota: téngase en cuenta que, incluso cuando se "escribe" en una pantalla Windows, en realidad se están "dibujando" los caracteres. De acuerdo con Charles Petzold en su clásico "Programming Windows", las estructuras de datos utilizadas en la GDI para definir los "fonts" de caracteres, están entre las mayores de Windows.
§2 Información
Junto con Windows 3.0, Microsoft comenzó a comercializar los denominados SDK ("Software Developper Kit"), un conjunto de herramientas, documentación y ejemplos pensados para el programador de aplicaciones Windows. Los SDK incluyen toda la información que el programador puede necesitar sobre la API de estos Sistemas. Desde entonces se actualizan regularmente y se han convertido en herramienta indispensable para los programadores de este tipo de aplicaciones, ya que constituyen la "referencia oficial".
Nota: Hace tiempo que esta documentación no se publica en papel, solo en formato digital; está disponible en CD, aunque también puede ser descargado desde la Web de Microsoft.
A su vez, la SDK es parte de un sistema de recursos mucho más amplio denominado MSDN ("Microsoft Developer Network"). Se trata de la principal fuente de información que Microsoft pone a disposición de la comunidad de programadores y empresas que desarrollan aplicaciones para plataformas Wintel. Tanto si se es usuario habitual de productos y tecnologías MS, como si se está estudiando hacerlo, es el punto de contacto que MS pone a disposición de esta comunidad para que esté al día de todos los cambios que se están produciendo en sus diferentes productos.
Este programa es una especie de paraguas que incluye una serie de contenidos de diferente índole. Se distribuye en dos canales: de una parte, las subscripciones a MSDN, con envíos mensuales de todos los productos y tecnologías de la compañía. De otra, la formación e información que hay disponible en la Web:
- Web española del fabricante:
www.msdn.microsoft.es.
- Web en inglés:
http://msdn.microsoft.com
Generalmente, toda la información necesaria sobre la API de Windows,
junto con la información adicional que compone la SDK, está incluida en
el sistema de ayuda de algunos productos de Microsoft. Por ejemplo, en el que
acompaña a los compiladores C++ 5.0 y siguientes, que son parte integrante de
la suite MS Visual C++ [3].
Recientemente, Microsoft ha publicado distintas versiones de su "Window
Server Platform SDK" (parte de Visual Studio), que están disponibles
para su descarga libre desde la Web .
A la fecha de revisar estas líneas, la última es la Windows Server 2003 R2 SDK - March 2006 Edition.
Incluye
toda la información y herramientas necesarias para programar en los sistemas
Windows de 32 y 64 bits. Puede ejecutarse en prácticamente todas las
versiones de Windows 2000; Windows Server 2003 y Windows XP (aunque no en
Windows 98). Para compilar los ejemplos necesitará un compilador C++,
para lo que no sirve Visual C++ 6.0, aunque quizás puede descargar la versión
Express de MS Visual C++ 2005, que se anuncia como "a free, lightweight,
easy-to-use, and easy-to-learn tools for the hobbyist, novice, and student
developer"
.
Nota: Debo advertir que no he probado este compilador. También que, como viene siendo habitual en el fabricante, esta versión de C++ dispone de opciones que, al menos de momento, NO son estándar.
Como fuente de información sobre la API, particularmente utilizo un fichero de ayuda
(win32.hlp) titulado Win32
Programmer's Reference. Aunque es algo antiguo (Copyright 1992 - 1996),
contiene prácticamente la totalidad de la API de Windows 32, a excepción de
las últimas implementaciones. Además de las ventajas habituales de este tipo
de ayudas (pestañas "Contenido", "Índice" y
"Buscar") contiene tres botones adicionales de navegación: "Quick
info", con información sobre ficheros de cabecera, librerías y
compatibilidad de la función. "Group", con información sobre
funciones relacionadas, y "Overview", con información conceptual.
Puede descargarse del sitio de Borland
Borland C++ developer support
Nota: el fichero aparece como Borland C++ 5.02 Window Help patch (5.6 MB). En realidad se descarga el fichero BC52HLP1.ZIP que contiene el mencionado fichero de ayuda win32.hlp de 24.2 MB.
Otra vía de información didáctica, pueden ser recursos de la Web (como el presente); también mediante libros que
tratan del tema, de los que se han escrito muchos. Un clásico al respecto,
de fama bien merecida, es "Programming Windows", de Charles Petzold
(Microsoft Press), que a lo largo de varias ediciones explica en detalle y con
múltiples ejemplos, las complejidades
de la interfaz de estos sistemas operativos.
Otra vía de aproximación al problema [2], especialmente indicada para programadores C++, es utilizar
la denominada MFC (Microsoft Foundation Classes). Es una librería de clases C++ que acompaña regularmente al
compilador Visual C++, y ofrece un cómodo soporte para todos los servicios que puede ofrecer el sistema. De hecho,
los métodos de esta librería de clases C++ recrean muy de cerca las funciones de la SDK
tradicional.
Naturalmente, toda la información correspondiente a esta colección de
clases, está incluida junto al compilador VC++. Otra fuente de
información sobre esta librería es la obra
"Programming Windows with MFC" de Jeff Prosise
(Microsoft Press).
[0] "There are literally thousands of API functions, and it can take six months to a year to get a good handle on the API". Kate Gregory en el libro "Using Visual C++ 6" Special Edition. Que Publishing 1998.
[1] El denominado "Flat memory model", disponible en los procesadores Intel 386 y siguientes permite acceder directamente a 232 == 4.294.967.297 Bytes de memoria.
[2] Seguramente esta vía será cada vez será más importante, ya que los sistemas
operativos del gigante de Redmond, como el resto de los que siguen las
tendencias actuales, es cada vez más "++", es decir, más orientado a
objetos. Los modernos sistemas operativos tienden a ser en sí mismos
objetos distribuidos DCOM (
1.7.1); de hecho, las versiones actuales de Windows se
parecen ya muy poco a aquel primer Sistema fabricado por encargo de "Big Blue".
[3] Microsoft está migrando todas sus aplicaciones
al entorno .NET, y el soporte para MS Visual C++ 6.0 ha sido suspendido. En Mayo
del 2006 la última versión del popular entorno de desarrollo era Visual C++
2005. Más información al respecto en
MS Visual C++ Developer Center.