Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


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:


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).

  Inicio.


[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.