sábado, 8 de mayo de 2010

Utilizando librerías dll desde C++

crab-icon cpp

Bueno, aquí vamos con mi primer post, y para ir a contracorriente no vamos a empezar precisamente con algo fácil. Toca manejarse con C++, ese lenguaje maligno que tiene la habilidad en convertir lo sencillo en complicado (No es mi lenguaje favorito como habréis adivinado).

Pues en este post vamos a aprender como utilizar desde C++ una librería de linkado dinámico, mas conocidas como dlls. En cualquier otro lenguaje hacer esto es el pan de cada día, por ejemplo en C# basta con ir al apartado referencias, click derecho, agregar referencia y ya está. Sin embargo en C++ no es tan sencillo.

Para este ejemplo utilizaremos Visual Studio 2010, que esta nuevito y recién salido del horno, y no os preocupes si usáis una versión anterior que explicare las diferencias. Y para los aventados, se que utilizar una dll compilando desde línea de comandos no es nada difícil, pero tengo la extraña manía de utilizar IDEs (Lo se, soy terrible).

Bueno, pues para empezar, por algún motivo C++ no solo utiliza el archivo dll como otros lenguajes, necesitamos el archivo lib asociado y además los archivos .h de todas las clases que compone el dll. Sabiendo esto, creamos nuestro proyecto en Visual Studio, en caso de que no lo tengamos ya y vamos a la carpeta del proyecto. Para tener a mano todo esto que necesitamos crearemos aquí dos carpetas, import y lib, y metemos los archivos .h de la libreria en import y el archivo .lib en la carpeta lib.

shot1¿Y que hacemos con el archivo dll? Pues la mejor opción será meterlo en una carpeta donde el Linker no tenga problemas para encontrarlo, la mejor opción es  C:\Windows\System32 donde se encuentran los dll que utilizan otros programas.

shot2 Tras esto abrimos el Visual Studio, y una vez abrimos el proyecto, vamos a Herramientas->Opciones (Tools->Options en ingles) y aquí en proyectos y soluciones buscamos Directorios de VC++(VC++ Directories):

shot3 Ups, ¿Que es esto? Me explicare. Aquí podremos encontrar las opciones de configuración de directorios en versiones mas antiguas de VS, pero por algún motivo en VS 2010 nos encontramos con esto. Puedes pulsar ? todo lo que quieras que no sale ninguna ayuda, y la hoja de propiedades que menciona, yo personalmente no la encuentro por ningún lado. ¿Donde esta esto entonces?

En el explorador de soluciones, hacemos click derecho en el proyecto y entramos en propiedades, y ahí lo encontramos (¿Que sentido tiene quitar una cosa para dejarla en otro sitio? Aunque no tenia sentido quitarla para empezar, en fin…):

shot4Aquí en  Include Directories y en Library Directories añadimos nuestras carpetas Include y lib respectivamente, separándolas de lo que ya hay por ; y intentando no cargarnos nada.

Tras esto buscamos en la misma pantalla Vinculador->Entrada(Linker->Input):

shot5Aquí añadimos en Dependencias Adicionales(Aditional Depencences) el nombre de nuestro archivo .lib (solo el archivo, sin ruta) y una vez mas separándolo con ; y con cuidado de no cargarnos nada. Le damos a aceptar y ¡Voila! Si todo ha ido bien nuestro programa ya debería compilar y ejecutar (¡No os olvidéis de poner los include!)

shot6¿Conclusiones? Pues yo personalmente creo que esto es algo básico que debería ser muchísimo mas sencillo, y aunque explicado parezca hasta evidente os reto a intentar esto solos sin seguir ningún tutorial (Incluso podéis probar a buscar en google, que lo que yo me encontré no hizo mas que liarme).

En cuanto a lo de el Visual Studio 2010 de quitar una pantalla de configuración, cambiarla por una hoja de propiedades aparentemente inexistente y sin embargo dejar la pantalla de configuración si se accede desde otro sitio… En fin, corramos un estúpido velo, lo dejare a vuestro criterio.

Un saludo, y ¡Sed buenos cangrejos! emoti-crab5

Etiquetas de Technorati: ,,,,

2 comentarios:

  1. A ver si blogspot se arregla de una vez y puedo poner la cabezera en condiciones

    ResponderEliminar
  2. Hola! Soy Mirlo y tengo un problemilla.

    Problemilla:
    Quiero llamar a una DLL desde la consola (aplicacion win32) y no con windows form, y me estoy haciendo la picha un lio....la verdad es que si la invoco en programilla hecho en c# no tengo ningun problema, es sencillo. Pero no tengo ni idea de como llamarla a trabes de visual c++ en modo consola....He leido el articulo pero no me tira.

    Lo que hace la libreria .dll es establecer comunicacion con un dispositivo usb, en concreto un microcontrolador PIC.

    La libreria se llama mpusbapi.dll y te la proporciona la casa Microchip....

    Mi pregunta es: Tu sabrias decirme como invocar esa dll?¿?

    Muchas gracias por adelantado....estoy desesperado....no hago mas que buscar pero por lo que se ve nadie utiliza dll en c++ visual...

    ResponderEliminar