[SOLUCIONADO] Problemas para importar un dll

Iniciado por SARGE553413, 7 Julio 2014, 12:55 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos.

Tengo que hacer un proyecto en el cual debo usar un dll. Para las primeras pruebas creé un proyecto e importé el dll de forma "estática", es decir, haciendo simplemente
#include "nombreDLL.h".

El caso es que ahora he creado un proyecto nuevo, intento importar o incluir ese fichero de cabecera y el compilador me da este error:
error LNK2028: se hace referencia al símbolo (token) sin resolver (0A000017) ...
error LNK2019: símbolo externo "public: static class XCamera * __cdecl XCamer ...

No sé que hacer, ¿Alguien puede ayudarme por favor?

Luisango

Hola!

Un DLL es, por decirlo así, un conjunto de funciones compiladas que te ofrecen cierta funcionalidad de manera externa.

Cuando utilizas en tu código una función de una DLL externa, estás llamando a funciones que están compiladas en esa librería y, para ello has de incluir en tu proyecto una referencia directa a esa librería, para que cuando se ejecute el linker, éste pueda determinar dónde exáctamente se encuentra el código de esa función en concreto. En Visual Studio puedes hacer esto haciendo click derecho en tu proyecto, seleccionando propiedades y en la sección de C++ > Linker hay un apartado que se llama Additional Libraries o Librerías adicionales, sitúa ahí la librería DLL y vuelve a compilar.

Es muy importante que entiendas cómo funciona cada subproceso de compilación de C/C++ para que puedas programar con seguridad. Aquí te dejo un vídeo que explica muy por encima cómo funciona: https://www.youtube.com/watch?v=2dan4hJlOv0

Espero haberte ayudado.
Even better...

eferion

Generalizando, cualquier función que uses en C++ (sea tuya propia o de terceros ), se compone de dos partes:


  • Cabecera: es la declaración de la clase, se suele encontrar en los archivos de cabecera (*.h)
  • Implementación: la chicha de la función, es la parte que tiene el código fuente, se encuentra en ficheros de código (*.c)

Cuando quieres incluir una función en tu código necesitas ambas partes para que el invento funcione.

Cuando tu compilas una DLL se generan dos archivos:


  • La librería (*.dll), incluye el código de la librería debidamente compilado.
  • Archivo con la interfaz de la librería (*.a, *.lib). Este archivo te lo va a requerir la aplicación que vaya a usar tu librería para poder "enlazar" correctamente con las funciones contenidas en la dll

El error que te está dando el compilador es que, como no le estás indicando dónde se encuentra el archivo con la interfaz de la librería y, en consecuencia, no es capaz de encontrar los puntos de entrada a las funciones contenidas en tu dll.

Solución: modifica tu proyecto para incluir el archivo de la interfaz en el proceso de linkado.

flony

#3
por una pregunta que haces antes, parece que es tuya la libreria
dependerá del IDE que tienes, pero es evidente que el problema es que no puedes linkar

como ves en el dibujo fase 3, las librerías es algo que viene de afuera de tu código, para ello deberás "linkear" ("algo así como decirle donde esta ubicada la dll)
bueno si usas visual acá un ejemplo sencillo de como hacer una librería estática(esta es la primer parte del problema llega hasta fase 2) y usarla en tu programa (esta seria la segunda parte acá llega hasta fase 3) para decirlo en terminos sencillos vas a hacer dos proyectos distintos que tienen algo en comun
http://msdn.microsoft.com/es-es/library/ms235627.aspx
y aca un ejemplo para usar una dll
http://msdn.microsoft.com/es-es/library/ms235636.aspx
si un problema no tiene solucion entonces no es un problema...es algo inevitable

SARGE553413

Ok muchas gracias a los 3, ya lo he conseguido solucionar.

Como decís, hacía le include pero no añadía el .dll en propiedades del proyecto.

Saludos.