(WinAPI, Windows API). Conjunto de funciones ( API) contenidas en bibliotecas que permiten que una aplicación se ejecute en el sistema operativo Microsoft Windows. Son diseñadas en C y C++.
Sus versiones son Win16, Win32, Win32s, Win64.
Microsoft desarrolló un SDK (kit de desarrollo de software), que provee la documentación y las herramientas que permite a los desarrolladores crear software usando las API de Windows y otras tecnologías asociadas a este sistema operativo.
Las funciones API se pueden categorizar en:
-Servicios Base:
Provee acceso a los recursos fundamentales disponibles en sistemas Windows. Como son el sistema de archivos, dispositivos, procesos, acceso al registro de Windows, manejo de errores, etc. Estas funciones residen en los archivos kernel.exe, krnl286.exe o krnl386.exe en Windows 16 bits, y kernel32.dll y advapi32.dll en Windows 32 bits.
-Graphics Device Interface ( interfaz gráfica):
Provee la funcionalidad para mostrar contenido gráfico a los monitores, impresoras y otros dispositivosde salida. Reside en el archivo gdi.exe en Windows 16 bits, y en gdi32.dll en Windows 32 bits.
-Interfaz de usuario:
Provee la funcionalidad de crear y gestionar las ventanas y los controles más básicos como botones y barras de desplazamiento, entradas desde el mouse y el teclado, y otras funcionalidades asociadas a la parte GUI de Windows. Esta unidad funcional reside en user.exe en Windows 16 bits y user32.dll en Windows 32 bits. Desde la versión Windows XP, los controles básicos residen en comctl32.dll, juntos con los controles comunes (Librería de Controles Comunes).
-Librería de cajas de diálogos comunes:
Provee a las aplicaciones las cajas de diálogo estándar para abrir y guardar ficheros, elegir colores y fuentes, etc. La librería reside en el archivo commdlg.dll en Windows 16 bits, y en comdlg32.dll en Windows 32 bits. Está agrupado junto a la categoría Interfaz de Usuario.
-Librería de controles comunes:
Da a las aplicaciones acceso a controles avanzados que provee el sistema operativo. Esto incluye la barra de estado, la barra de progreso, barra de herramientas, solapas, etc. La librería reside en el archivo commctrl.dll en Windows de 16 bits, y en comctl32.dll en Windows de 32 bits. Es agrupado bajo la categoría Interfaz de Usuario.
-Shell de Windows:
Componente del API de Windows que permite a las aplicaciones acceder a la funcionalidad que provee el shell del sistema operativo. El componente reside en shell.dll en Windows de 16 bits, y shell32.dll en Windows 95, y shlwapi.dll en Windows 32 bits.
-Servicios de red:
Da acceso a varias capacidades de red del sistema operativo Windows. Sus subcomponentes incluyen NetBIOS, Winsock, NetDDE, RPC y muchos más.
Internet Explorer también ofrece muchos APIs que pueden ser usados por aplicaciones y pueden considerarse parte del API de Windows pues IE viene integrado con este sistema desde su versión 98. Esa integración se detuvo en Windows Vista. Ver API de Internet Explorer.
Microsoft también provee un conjunto de APIs como parte de la instalación de Windows desde Windows 95 OSR2 llamado DirectX. Provee algunos API relacionados a servicios multimedia y de juegos. Algunos son: Direct3D, DirectDraw, DirectSound, DirectInput, DirectPlay, DirectShow, DirectMusic.
Las API de Windows generalmente se concentran en la interacción entre el sistema operativo y una aplicación. Para la comunicación de diferentes aplicaciones entre ellas, Microsoft desarrolló una serie de tecnologías. Primero DDE, luego OLE, y más tarde COM.
¿Dudas? ¿comentarios? Escriba y responderemos: clic aquí
------------------------------------------
PD
no obstante lo importante del diccionario te agrego la opinión vertida ya en el 2003 por alguien con experiencia en programación:
(*) Microsoft Foundation Classes o MFC
Porqué deberías aprender la API antes que la MFC
La Controversia
Muchas personas entran al IRC y preguntan "¿Que es mejor, MFC o API?" y muchas otras personas están dipuestas a responder "MFC es un m..." o "API es una m...", ya sea porque quizás una o lo otra estubo involucrada en algún evento traumático en su infancia, o simplemente porque todos dicen que una es mejor que la otra.
Los argumentos estándar son:
- API es muy difícil
- MFC es demasiado confusa
- API es mucho código
- MFC está mal diseñada
- API no es orientada a objetos
- MFC pateó a mi perro
- API se robó a mi novia
Y así...
Mi Respuesta
Primero de todo vamos a aclarar que son la API y la MFC. API es un término genérico que significa Aplication Programming Interface (Interface para la Programación de Aplicaciones). Sin embargo, en el contexto de la programación en Windows, esto se refiere específicamente a la API de Windows, la cual es el nivel mas bajo de interacción entre las aplicaciones y el sistema operativo.
Los drivers, por su puesto, tienen aún niveles inferiores y trabajan con diferentes conjuntos de llamadas a funciones, pero para la gran majoría de desarrollo en Windows esto no es relevante. MFC es una Librería de Clases, un conjunto de clases C++ que han sido escritas para reducir la cantidad de trabajo que tomaría realizar ciertas cosas utilizando la API. La MFC además introduce dentro de la aplicación un esqueleto (o framework) Orientado a Objetos, de cual puedes tomar ventaja o ignorarlo si deseas, como lo hacen la mayoría de los principiantes debido a que este framework no está apuntado a escribir reproductores de mp3, clientes IRC o juegos.
Entonces, ¿Cuál es el framework correcto?... Para principiantes, aquellas personas que simplemente están aprendiendo a programar, creo que deberían trabajar con la API hasta que estén a gusto con la manera en que funcionan las aplicaciones y comprendan todos los mecanismos básicos que hay detrás de cosas como el Loop de Mensajes, GDI, Controles y quizás aún mutlithreading y sockets. De esta forma comprenderán los cimientos de todas las aplicaciones en Windows y podrán aplicar este conocimiento común a MFC, Visual Basic o cualquier otro framework que no sporte todo lo que la API hace, simplemente porque dicho framework ya hace una gran cantidad de cosas y no puede soportar todas esas pequeñas cosas que nadie usa. Entonces, cuando necesites usar esas cosas, es ahí dinde puedes agregarlas tu mismo utilizando tus conocimiento sobre la API.
¿Pero la MFC no es mas fácil? En cierta forma, es mas fácil cuando muchas tareas comunes son realizadas por uno mismo, reduciendo la cantidad de código que realmente necesitamos tipear. Sin embargo, menos código no significa "mas fácil" cuando no entendemos el código que necesitamos escribir, o cuando no entendemos cómo funciona dicho código.
Generalmente los principiantes que utilizan los wizards para comenzar sus aplicaciones, no tienen idea que hace la mayoría del código que se ha generado y pierden una gran parte del tiempo intentando darse cuenta donde agregar cosas o que cambios deben hacer para para alcanzar un cierto resultado. Si comienzas a escribir tus programas desde cero, ya sea utilizando la API o MFC, entonces comprenderás todo lo que está puesto allí ya que fué puesto por vos mismo y solo usarás las cosas que entiendes como funcionan.
Otro factor importante es que la mayoría de las personas que están aprendiendo por primera vez la API Win32, no tienen una fuerte base en C++. Intentar comprender la programación en Windows utilizando la MFC y aprender C++ al mismo tiempo puede ser una tarea monumental. Si bien no es imposible, estará lejos de ser mas productivo que hacerlo teniendo conocimientos sobre C++ y la API.
Entonces, básicamente...
Lo que pienso es que deberías aprender la API hasta que te sientas cómodo con ella y luego intentar con la MFC. Si luego, pareciera ser que tiene sentido y puedes ahorrar tiempo con la MFC, entonces úsala.
Sin embargo, y esto es importante... si quieres trabajar con la MFC sin entender la API y luego buscas ayuda por algo y la respuesta que obtienes hace referencia a la API (como por ejemplo "Usa el HDC provisto en el mensaje WM_CTLCOLORSTATIC"), seguramente quedes colgado ya que no entiendes como traducir un objeto de la API a uno de la MFC. En ese momento estarás en problemas y las personas se frustrarán contigo por no aprender todo aquello que necesitas de la API antes de intentar usar la MFC.
Personalmente prefiero trabajar con la API, solo me parece mejor. Pero si tengo que escribir una terminal para una base de datos o un host para un conjunto de controles ActiveX, consideraría seriamente usar la MFC ya que podría eliminarme una gran cantidad de código que, en otro caso, debería reinventar.
---------------------------------
(*) Microsoft Foundation Classes o MFC
es un conjunto de clases interconectadas por múltiples relaciones de herencia, que proveen un acceso más sencillo a las API de Windows. Fueron introducidas por Microsoft en 1992 y desde entonces fueron apareciendo nuevas versiones con las actualizaciones del entorno de programación Visual C++, gracias a las cuales éste se convierte en un generador de programas C++ para Windows. Tiene una gran complejidad añadida debido a la necesidad de que el programador ahora no sólo debe controlar C/C++, sino que además debe conocer las clases de la MFC para poder utilizar su potencia. Con el paso del tiempo Microsoft Foundation Classes se ha convertido en la implementación estándar de la industria para la creación de aplicaciones gráficas en plataformas PC. A pesar de tener sus limitaciones, su adopción demuestra los beneficios de productividad de la reutilización de marcos comunes para desarrollar aplicaciones gráficas para negocios.
ver nota en http://es.wikipedia.org/wiki/Microsoft_Foundation_Classes
|
No hay comentarios:
Publicar un comentario