Que Diablos Es Esto?

Estado
Cerrado para nuevas respuestas.

ZeN<CyBeRKiLLeR>

LANero oficial
15 Abr 2001
2,486
Hola mejos,

Esta vez les tengo una inquietud para aquellos como MigPosada que sean bien tesos en C++


que son las Standard Template Library como se usan, que ventajas ofrecen?

Gracias a los que respondan.
 
Me extraña mejo que no sepa eso, son las STL, son plantillas de clases estándar de C++, se añadieron al lenguaje relativamente hace poco cuando cuando se aprobó el ANSI/ISO del C++, entre estas plantillas están la clase <string> y la <vector>, que personalmente son las que más utilizo, ahh y se me olvidaba, las que manejan listas y colas. Estas son librerías que están escritas lo más eficientemente posible.
 
Es cierto, pero no creo que realmente sean "lo más eficientemente posibles". Esas plantillas te facilitan la vida cuando necesitas tener una estructura de datos estándar (como las listas enlazadas) para cualquier tipo de datos que se te ocurra. Pero no existe forma alguna de que pueda derrotar en eficiencia al código creado especificamente para tus necesidades porque son bastante genéricas. Por ejemplo, NUNCA veras a Carmack o Tim Sweeney usando una de esas STL en el código de Quake o Unreal.
 
Hmm, si, pero me refiero a lo de eficientes por lo genéricas que son!, se pueden utilizan con todo, pero todo esto es relativo, esas librerías son programadas por gente que sabe mucho del tema, por lo menos en cuestión de manejo de memoria y apuntadores esas librerías lo hacen de una forma excepcional.
 
Tengo una duda:

Si yo creo varias funciones que suelo emplear con frecuencia, ¿cómo diablos hago para convertirlas en una librería y poderla utilizar en cuaquier programa que haga?
 
Eso al final se convierte en una DLL.... Podes crear una DLL con todas las funciones que utilices comunmente y volia... Una sola DLL pa 10 programas diferentes.... Eso es lo que hace Windows...
 
HAAAAAAAAA o sea que si sabia pero no me habia dado por enterado, es que un profesor me recomendo eso y me quedo sonando.

gracias,
 
Es facil agrupar las funciones para una librería estática (.lib) o una librería dinámica (.dll) que puedes utilizar en muchos programas diferentes.

Una librería estática se crea de la misma manera que un ejecutable, solo que sin la funcion main, al compilar te genera un archivo .lib en vez de .exe
Después, cuando quieras utilizar la libreria en un programa, pones:

#include "miarchivodecabeceraparalalibreriaquecree.h"

añades el archivo .lib a tu proyecto (en MSVC) y voila!
 
Si quieren les indico el paso a paso en Visual C++ para crear una libreria estática.

(Los dll son un poquitín más complicados)
 
Pues yo tampoco entendi mucho, pero haber intento explicar... Las librerias es lo que contiene lo que vos preguntabas antes.....

Si yo creo varias funciones que suelo emplear con frecuencia, ¿cómo diablos hago para convertirlas en una librería y poderla utilizar en cuaquier programa que haga?

Esas funciones se meten en un pedacito de programa, una librería, la cual podes incluir en tus proyectos de forma facil, y con solo incluirla, ya todas las funciones que tengas en esa libreria, se hacen disponible para tu programa.
 
Hole si Mig, interesante la vaina, porque no se hace un tutorial para esta vaina de las librerías estáticas y dinámicas, me parece bacano poder utilizarlas de esa forma.
 
Para las librerias estáticas:

Primero: qué son? Las librerias son grupos de funciones que puedes utilizar en otros programas, por ejemplo puedes agrupar funciones para hacer gráficos, o para realizar ciertas operaciones matemáticas.

Cuando uno crea un programa en DOS o Linux, la entrada principal del programa es la función main, es decir, apenas se ejecute el programa la computadora arranca en main (WinMain en caso de Windows). Pero una libreria no tiene funcion main, porque no es un programa, sino que el programa hace uso de las funciones que tiene esta.

¿Entonces como creas una libreria?
En Visual C++ das click File->New y seleccionas en la lista de tipos de proyectos "Win32 Static Library".
Después añades archivos .cpp al proyecto (usando la lista de archivos, dando click derecho en la carpeta Source Files y seleccionando del menu desplegable "Add Files To Folder")
En los archivos .cpp escribes las funciones de tu libreria como lo harias con cualquier programa, pero sin la funcion main (si entienden por qué, cierto?)
Cuando compilen el proyecto, Visual C++ les genera un archivo .lib, que es el que usaran en los otros programas.

Ahora lo que necesitan, antes de poder usar la libreria, es el archivo de cabecera (.h)
Este archivo (o archivos, como prefieran) contiene los prototipos de las funciones y clases de esta libreria que van a utilizar los programas. Simplemente coloquen el valor de retorno, el nombre de la funcion, y los parametros seguido de punto y coma. Por ejemplo:

char * GetFileRoot(char * filename);

El archivo de cabecera es necesario para que cuando compiles tu programa, el compilador conozca las funciones y clases que hacen parte de tu libreria.

¿Como usas la libreria?
Copias el archivo .h y el .lib a un lugar que te parezca comodo (por ejemplo en la misma carpeta de tu programa) y pones en donde necesites la libreria

#include "miarchivopuntoh.h"

Y añades el archivo .lib al proyecto, esto lo haces dando click derecho en la lista de archivos y poniendo "Add Files to Project"

Ahora pueden usar las funciones de tu libreria estática en el programa. Cuando este se compile, el código que se encuentra en el .lib es copiado al .exe.

Me avisan si les queda claro, o si prefieren ver un ejemplo.
 
Ok, la ventaja de las librerias dinámicas radica principalmente en dos cosas:

1. Se pueden actualizar sin necesidad de recompilar todos los programas que hacen uso de esa librería.

2. Si tienes muchos programas que hacen uso de la misma librería, se gasta menos espacio en disco y en la RAM.

Existen dos maneras de hacer librerias dinamicas, librerias dinamicas que se enlazan con el programa de manera estática, y librerias dinamicas que se enlazan con el programa de manera dinámica (suena raro, no? :)

En cristiano quiere decir,

- Puedes crear el DLL como si fuera una libreria estática, de esta manera el compilador genera tanto un archivo .lib como un .dll
Usas el .lib en los programas que necesitan de la libreria y en tiempo de ejecución buscara automaticamente el dll correspondiente.

- La otra es que usando una función llamada "LoadLibrary" cargas el DLL directamente en el programa y luego le pides un puntero a la función que necesites dentro del DLL usando "GetProcAddress". Si no entiendes esto ultimo, no te preocupes, esto es más avanzado y no necesitas saberlo (o usarlo) con DLLs.

Esperen pronto un pequeño tutorial tanto de librerias estáticas como dinámicas en Visual C++.
 
Oops, se me había olvidado mi propia promesa. La verdad he estado un poco ocupado :p

De verdad alguien necesita que haga ese tutorial sobre creación de librerías estáticas y dinámicas en VC++?
 
Seria excelente, porque es como dificil conseguir un buen tutorial en español (por no decir imposible) de vc++, y mi inglish es pobrinchi para leer los tutoriales en ingles.

Por cierto, don Mig, como era su pagina, que alguna vez la vi en un foro y se me olvido, para pillar los documentos que tienes ahi. :)
 
Estado
Cerrado para nuevas respuestas.

Los últimos temas