• Sábado 20 de Abril de 2024, 01:48

Autor Tema:  Librerías  (Leído 2713 veces)

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Librerías
« en: Miércoles 4 de Agosto de 2004, 04:43 »
0
HOLA!! alguien sabe donde hay información un tanto cuanto detallada sobre librería en c++ (turbo c++ 3.0), lo que es, para que sirven, caracteristicas, que tiene de diferencia de la cabecera, como se hacen, vaya toodo sobre las librería de c, me sería de mcuha ayuda gracias.
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

Getovich

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Librerías
« Respuesta #1 en: Jueves 5 de Agosto de 2004, 16:34 »
0
hola, bueno de forma muy resumida te dare uno datos que se, hay dos tipos de librerias estan las de vinculo dinamico y las de vinculo estatico, *.dll y *.lib respectivamente, las primeras se cargan en memoria y pasan los puntos de entrada a la aplicacion (por ej la direccion de las funciones) para luego usarlas y las otras se compilan junto con la aplicacion (estan dentro del archivo *.exe), lo que logramos con las de vinculo dinamico es achicar el tamano del *.exe.

Para crear estas librerias debemos tener en cuenta el tipo por ejemplo:

para una libreria estatica, en el archivo de cabecera seria algo asi:

int Suma(int numero1, int numero2);

en el archivo de codigo:

#incude "micabecera.h"

int Suma(int numero1, int numero2)
{
         return numero1 + numero2;
}

para usarla debemos incluir tanto la cabecera como la libreria compilada y linkada a nuestra aplicacion.

#include "micabecera.h"

main()
{
      int a;
      int b;

    a=12;
    b=15;

   printf("%d",Suma(a,B));

}


para las de vinculo dinamico es un poco mas extenso, son para win32 y tendremos que conocer bien las razones de su llamada pero bueno vamos a ver las diferencias

en la cabecera seria:
/*si usamos dllimport/export nos evitamos tener que adjuntar un archivo de exportacion que en este caso seria algo asi
EXPORTS
Suma @01 donde asignamos un numero ordinal a la funcion
*/

#ifdef SUMA_NUMEROS_EXPORTS
#define SUMA_NUMEROS __declspec(dllexport)
#else
#define SUMA_NUMEROS __declspec(dllimport)
#endif

SUMA_NUMEROS int Suma(int numero1, int numero2);

en el archivo cpp seria muy diferente a la estatica ya que contamos con una funcion DllMain (win32)

#include "micabecera.h"

BOOL APIENTRY DllMain( HANDLE hmo,
                       DWORD  motivo_del_llamado,
                       LPVOID reservado
                )
{
    switch (motivo_del_llamado)
{
          case DLL_PROCESS_ATTACH:
         case DLL_THREAD_ATTACH:
           case DLL_THREAD_DETACH:
           case DLL_PROCESS_DETACH:
      break;
  }
    return TRUE;
}

//luego la funcion suma
SUMA_NUMEROS int Suma(int numero1, int numero2)
{
   return numero1 + numero2;
}

para usarla tambien se nos complica un poco, al tener que llamar a dos funciones una para cargarla (LoadLibrary) y otra para traer el puntero de la funcion (GetProcAddress).

en una aplicacion simple seria algo si:

#include <windows.h>
typedef int (CALLBACK* DLLSUMA)(int,int);// prototipo

int APIENTRY WinMain(HINSTANCE hin, HINSTANCE hpin, LPSRT com, int show)
{

HINSTANCE midll;
DLLSUMA el_puntero_a_suma;
int numero1;
int numero2:
int Resulatado;

midll = LoadLibrary("suma.dll");
if (midll != NULL)
{

el_puntero_a_suma = (DLLSUMA)GetProcAddress(midll, "Suma");

 if (!el_puntero_a_suma) //comprobamos si encontro el punto de entrada
   {
      FreeLibrary(midll);      
      return NULL;
   }

else //una vez encontrado usamos la funcion
   {

      //llamamos a la funcion
      Resultado = el_puntero_a_suma(numero1, numero2);
   }

}


bueno espero que te sirva de guia para poder crear tus propias librerias, fijate si podes conseguir algunos apuntes sobre el tema, es muy interesante y beneficioso para modular aplicaciones y reutilizar codigo.
Si se me fue algun detalle por ahi no duden en corregirme asi aprendemos todos.
salu2.

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Librerías
« Respuesta #2 en: Viernes 6 de Agosto de 2004, 05:42 »
0
ok,okok, de dll,no pregunte(pues si te fijas bien hable de turbo c++ 3.0 y en este no se usan los dlls, auqneu gracias), y de .lib ni medijiste nada, solo me habalste de cabeceras, y uan embarradita, de .lib solo mensionaste cosas, peor no em dijiste nada, ok, a ver deja veo :
en el .h pongo como quien dice la delcaración de las funciones, y en el .lib pongo la función ya descrita sin delcarar, ahora, comoconvierto mi archivito a .lib correcto?, y como lo añado para que lo jale, y cual es la ventaja de usar una librería a usar simplemente la cabecera?, se sería de mucha ayuda gracias.
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

Getovich

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Librerías
« Respuesta #3 en: Viernes 6 de Agosto de 2004, 17:26 »
0
he! no seas egoista, tu preguntaste de librerias yo te respondi sobre librerias, tene en cuenta que hay gente que le puede servir tanto un tema como otro englobado en el mismo titulo "Librerias", no pienses solo en tu pregunta, pero bueno, con respecto a la embarrada si tu me la puedes senalar con gusto respondere, lo que necesitas saber antes de programar es como funciona tu compilador, si lo supieses no me preguntarias "cual es la ventaja de usar una librería a usar simplemente la cabecera?" es como si yo te preguntara "cual es la ventaja de usar un disco rigido a usar simplemente el cable?", con respecto a tu deduccion "en el .h pongo como quien dice la delcaración de las funciones, y en el .lib pongo la función ya descrita sin delcarar, ahora, comoconvierto mi archivito a .lib correcto?" lo de la cabecera es correcto, pero veo que has fallado en la lectura de un simple codigo, como me vas a preguntar si pones la funcion sin declarar?, no te das cuenta que PRECISAMENTE LA CABECERA ES PARA DECLARAR LA FUNCION Y LA INCLUIS CON LA LINEA #include "micabecera.h", entonces el compilador cuando llegue a la linea numero 3 ya sabe que se declaro una funcion llamada Suma, porque antes paso por la linea 1 y leyo #include "micabecera.h" y en la linea 1 del archivo de cabecera leyo "int Suma(int,int);". yo te sugiero que antes de seguir adelante con lo que sea, leas un poco sobre la parte funcional del compilador, luego los conceptos basicos que debes saber antes de ponerte a programar una vez pulido todo eso comienzas a ver las optimizaciones de ejecucion, memoria, etc... creo que por ahora te daria algunas preguntas para que pongas en el foro "Que es un compilador?, Como funciona?, Que es una cabecera? Para que sirve? Que es una declaracion? y una asignacion? etc...

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Librerías
« Respuesta #4 en: Sábado 7 de Agosto de 2004, 03:13 »
0
Me encanta; porque jamás respondes mi pregunta, solo le das vuela al asunto, creo que necesito ser literal contigo, no me entiendes. Bueno si te entedi eso desde el principio, ok,ok, es cierto, te pregunte sobre librería en general, y me dijiste sobre librería en general, enfocandote con dlls, obviamente sabes más de dlls, que sobre librerías estaticas, y por lo que veo sabes menos que yo sobre como hacerlas en turbo c++ 3.0, cuando te preguntan algo y contestas dandole vueltas al asunto es que no sabes, mejor di eso: "no se hacer librerías en turbo c++ 3.0, mejor ve y revisa el manual",  ahora, no se te ocurre que esa es la primera idea que piensa cualquiera?, sucede que yo tengo una versión de turbo c sin manual, solo baje el programa, no los manuales, y la ayuda que viene ahi no te enseña nada, te eplica para que sirve cada sentencia y función, no te dice como trabaja particularmente el compilador con cada dato, ni te da una explicación de cada utilidad que tiene, claro que se que es un compilador, y se como trabaja en forma general cualquier compilador, lee mis anteriores discusiones y curiosamente pregunto cosas que casi nadie sabe, no creo que las pregunte por churro, o por que lei las preguntas en una revista, pero bueno, veo que es mejor ver por otro lado, gracias.
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Librerías
« Respuesta #5 en: Martes 7 de Septiembre de 2004, 05:25 »
0
HOLA!! bueno después de adnarle dando vueltas ami pobre compilador, vi la respuesta a lapregunta de como hacer las librerías(esto me cosnta solo en Turbo C++ ):

Como dijo Getovich debes ahcer una cabecera con todas las variables y la declaración de todas las funciones, y luego hacer otro archivo (la extensión la verdad la desconozco yo use otro .h) ahora ahi desclosas tooodas als funciones, y solo el incluyes el archivo cabecera, después te vas a options y eliges application, ahi te sale un cuadro y debes presionar el boton que dice Library, y ahora puedes compilar el archivo o crearlo (make) y creas el .lib y tengo entendido qeu eso es toodo

ahora el problema es uqe no se como linkearlo al archivo .cpp para utilizar esta nueva librería, especifico en TURBO C++ 3.0, espeor que alguiens epa larespuesta
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Librerías
« Respuesta #6 en: Jueves 9 de Septiembre de 2004, 02:48 »
0
Trata de borrarte lo que hasta ahora has entendido y prueba de nuevo desde el principio :P.

¿Cuál es tu pregunta? ¿Cómo crear librerías o información sobre las librerías de C/C++? Esto porque en tu primer post no lo aclaraste muy bien.

Pero como pareces estar interesado en la creación de librerías, te comento algunas cosas:
  • Ya sabes que hay dos tipos: de enlace dinámico y de enlace estático.</li>
  • Gralmente., para crear una librería se crea un archivo de cabecera que declare las funciones de la librería, las cuales son implementadas en otro (o varios) archivo(s).</li>
  • El archivo de cabecera tiene extensión .h, el de implementación es .c (o .cpp si estás programando en C++).</li>
  • El crear una librería es muy similar a crear un programa cualquiera, la diferencia está en el tipo de archivo generado.</li>
  • Ese archivo generado es el que tendrás que incluir en el enlazado de tus programas que utilicen la librería en cuestión.</li>
El problema es que yo no uso Turbo C/C++, sino MinGW con el IDE Dev-C++, trataré de conseguirme el TurboC para ver si puedo echarte una mano, pero aclara un poco mejor qué es lo que quieres (te repito que no entendí muy bien tu primer post).

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip