[C con Clase] Winapi,MFC,ATL,CLI,Consola, .NET

Steven Davidson srd4121 en njit.edu
Dom Oct 30 13:23:58 CET 2011


Hola Felipe,

2011/10/30 FELIPE VALENCIA <anfevp en gmail.com>:
> Hola, queria preguntarles el significado de Winapi,MFC,ATL,CLI,Consola win32,CLR, .NET desde un
> punto de vista de la programacion, por ejemplo saber si son librerias o formas de
> programar, cuales son compatibles entre ellas, porque todas tienen un main
> diferente, y todo la informacion posible. Puede llegar a ser una pregunta muy
> abierta o muy mal redactada, pero es que no tengo mucho conocimiento

Veamos.

- Winapi es el API de MS-Windows. Un API es una Interfaz de
Programación de Aplicaciones. Esto es, se trata de una forma de
programación para crear aplicaciones. Típicamente, se trata de una o
más bibliotecas, como es el caso del API de MS-Windows.

- ATL: Biblioteca de Plantillas de Active. Sirve a modo de herramienta
para ayudar a programar con COM (Modelo de Objetos de Componentes) y
controles de ActiveX.

- CLI: Infraestructura de Lenguaje Común es un estándar para ejecutar
aplicaciones en un entorno de forma virtual, que abarca un CIL:
Lenguaje Intermedio Común y un entorno CLR: de un Lenguaje Común en
Tiempo de Ejecución. Esto es prácticamente lo que tiene Java con su
lenguaje compilado pero luego interpretado y ejecutado por el JRE. En
el caso de Microsoft, existe otro paso anterior que es una traducción
de cualquier lenguaje de programación (C++, C#, Visual Basic, etc.) a
un solo lenguaje común (CIL) y luego el programa en este lenguaje es
compilado y ejecutado a través del entorno CLR.

- Consola Win32 es exactamente eso: una consola bajo MS-Windows.
Previamente, se usaba el cuadro de MS-DOS o incluso el símbolo del
sistema. Para programar para la consola, sí existe una biblioteca o
API dentro del API de MS-Windows para ella.

- .NET es el armazón (o framework, en inglés) que alberga
principalmente un nuevo API de Microsoft para sus sistemas operativos.
Sin embargo, podemos usar un surtido de lenguajes de programación para
usar .NET. Este armazón es el homólogo a los "paquetes" o bibliotecas
de Java, que contienen las clases y métodos, al igual que el recogedor
o colector de basura, para no tener que indicar explícitamente la
liberación de memoria dinámicamente adjudicada.

> al respecto, siempre he programado en Consola win 32, pero en estos dias
> queria darle un aspecto mejor a un sencillo programa por lo cual estaba
> haciendolo con winapi, pero luego iba a utilizar un commo Dialog y al buscar
> encontre que se necesitaba MFC (el cual tenia un main un poco mas similar a

MFC es los Fundamentos de Clases de Microsoft. Básicamente, se trata
de una jerarquía de clases que engloban y envuelven las funciones
(globales) del API de MS-Windows, que originalmente se basa en C.

> win32) y VSC++ 9 no me permite mezclar una api con MFC entonces ahi entr

Sí, puedes mezclar. Lo que tienes que hacer es usar el ámbito global
para acceder a las funciones globales del API de MS-Windows. Por
ejemplo,

HWND hwndEscritorio = ::GetDesktopWindow();

> en el dilema, me gustaria saber las ventajas de cada una, cual la mas recomendable
> o en general las experiencias personales sobre la creacion de programas con
> interfaz amigable .
>

Sinceramente, no se suele trabajar con el API de MS-Windows
directamente, porque es del más bajo nivel de las API's que te puedas
encontrar, pero por otro lado es la más básica y fundamental.
Microsoft luego sacó MFC para hacer el API "más C++", pero no agregó
nada que no estuviese en el API de C, simplemente crearon las clases y
cambiaron los nombres de las funciones miembro envolviendo las
funciones de C del API.

También implementaron el concepto de OLE/COM que son de C++ para crear
"mini-aplicaciones" que pueden ser tratadas como objetos que son más
fáciles de manipular, por lo que luego sacaron las ATL que venían
siendo algo parecido a las STL que son estándares de ANSI C++, pero
para MS-Windows y especialmente para COM.

A partir de las versiones modernas de MS-Windows, hasta hoy, Microsoft
creó .NET y C# para crear un armazón común para todos los lenguajes y
todas las versiones de MS-Windows. La verdad es que .NET facilita
muchas cosas y principalmente, Microsoft se dedica más a "cultivar"
.NET que por ejemplo el API de MS-Windows. Esto no significa que el
API vaya a desparecer, pero digamos que no le ponen tanto empeño para
que sea "bonita" de usar, prefiriendo más .NET.


He sido algo breve y he simplificado mucho todo esto, pero espero que
te oriente y te aclare un poco el asunto.

Hasta luego,

Steven




Más información sobre la lista de distribución Cconclase