El post que buscas se encuentra eliminado, pero este también te puede interesar

C++ (VigesimoSexta parte) API de windows

Anuncios

C++ (VigesimoSexta parte) API de windows


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 .
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++ .
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 , 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.
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.
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".
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.

El Shell
§1 Sinopsis
El término "Shell" tiene un significado bastante amplio en informática. A veces se refiere a la interfaz del Sistema que permite al operador enviar órdenes mediante comandos; es la interfaz del denominado CLI ("Command Line Interpreter"; intérprete de líneas de comando. Aunque este nombre cambia de un SO a otro, se refiere al programa que interpreta las órdenes directas del teclado. En el viejo MS-DOS es Command.com. En los sistemas Windows se suelen referir a él como el "Shell" del DOS. En los sistemas Windows 9x todavía es accesible mediante las opciones "Abrir una ventana MS-DOS" o en: Menú de Inicio Ejecutar. Los sistemas Unix y Linux ofrecen diversas formas alternativas para esta interfaz.
En otras ocasiones es sinónimo de interfaz de usuario en cualquier programa (no necesariamente la interfaz del intérprete de órdenes del Sistema Operativo).
En un sentido aún más general, la palabra se refiere a cualquier dispositivo software que acepta una entrada que contiene una orden (puede ser de teclado o leída de un fichero "Script" y la ejecuta; la envía a la utilidad que debe ejecutarla, o controla su ejecución.

1.7.4 Eventos
§1 Sinopsis
Como señalábamos en la Introducción a la POO ( 1.1), los componentes básicos de los programas actuales son los objetos, que representan abstracciones y tienen dos tipos de componentes: propiedades y métodos. Las propiedades representan magnitudes que representan a su vez "propiedades" del objeto (valga la redundancia). Por ejemplo, una propiedad puede representar el color de fondo de una ventana; el saldo de una cuenta, o el estado de una línea de comunicación. Por su parte los métodos representan "acciones" que se ejecutan sobre el objeto, cuyo resultado puede ser de cualquier tipo, incluyendo devolver un valor. Por ejemplo, devolver el valor de una propiedad (saldo de una cuenta), alterarlo (cambiar el color del fondo de una ventana) o cerrar un dispositivo de comunicación.
En general la sucesión de acciones (invocación de métodos) que se realiza a lo largo de un programa, viene determinada por la estructura de su código. Pero la totalidad de los programas que corren en un sistema moderno son interactivos, en el sentido que su comportamiento puede ser influido desde el exterior (aunque sea para abortar su ejecución). El exterior inmediato del programa está representado por el Sistema Operativo que lo alberga en su seno. El exterior lejano puede ser el operador que actúa sobre el Sistema a través de un dispositivo (un teclado o un ratón) o un dispositivo que actúa sin intervención de ningún operador. Por ejemplo, una línea de comunicaciones que cambia de estado.
En el lenguaje de los Sistemas Operativos a estos sucesos captados por el Sistema se los denomina eventos. Según su tipo los eventos pueden ser procesados íntegramente por el SO o trasladados a los programas que corren bajo su control en forma de mensajes. Estos mensajes son interpretados por el programa como una petición para que ejecute algunos de sus métodos. Precisamente la estructura de un programa Windows moderno se basa en un bucle en el que el programa interroga constantemente al Sistema a la espera de mensajes, y en una larga cadena de sentencias condicionales (del tipo if ... else) en la que toma diversas acciones según el mensaje recibido.
Según su origen, los eventos se dividen en dos grandes categorías:
• Eventos de usuario
• Eventos de Sistema
Con independencia de su denominación, BC++ comprueba si se ha asignado algún código para manejar ese evento. Si se ha asignado, se ejecuta dicho código, en caso contrario no ocurre nada.
§2 Eventos de usuario
Los eventos de usuario son acciones que tienen su origen en el usuario del programa. Ejemplos de este tipo son OnClick (el usuario pulsa el botón del ratón), OnKeyPress (el usuario pulsa una tecla del teclado) y OnDblClick (el usuario pulsa dos veces el botón del ratón), Etc. Este tipo de eventos están siempre relacionados con alguna acción del usuario.
§3 Evento de Sistema
Este tipo de eventos son aquellos que se inician en el Sistema Operativo. Por ejemplo, OnTimer (el temporizador puede generar uno de estos eventos a intervalos de tiempo determinados), el evento OnCreate (un componente ha sido creado), OnPaint (un componente o ventana necesita ser redibujado), Etc. Por lo general los eventos de Sistema no tienen su origen directo en ninguna acción del usuario.
§4 Corolario
Desde el punto de vista de la programación C++, el tratamiento de eventos no es una cuestión del lenguaje, sino de la programación C++ "para" un sistema Operativo concreto. Por ejemplo Linux o Windows; razón por la cual no ahondaremos aquí en un tema que en cualquier caso no corresponde a un curso general de C++, sino a otro manual que podríamos denominar "Programación C++ para Windows, Linux, etc".
Al estudiante del lenguaje C++ le basta saber que en el caso de los programas C++, estos mensajes entre el Sistema y la aplicación se reciben en ciertas funciones muy curiosas, denominadas exportables o "callback", que tienen la peculiaridad de que además de la propia aplicación, también pueden ser invocadas por el Sistema, que puede de este modo pasar a la aplicación información sobre los eventos que le conciernen ( 1.4.4b2a)

Anuncios

1 comentario - C++ (VigesimoSexta parte) API de windows