2011-03-25 15 views
7

Estoy tratando de practicar con el uso de archivos DLL de Windows (no están acostumbrados a ellos). He seguido este artículo:.lib error cuando estoy usando un dll?

http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx

Para la carta.

Y, sin embargo, yo estoy recibiendo este error:

1> LINK: LNK1104 error fatal: no se puede abrir el archivo '.. \ debug \ math.lib'

Mi proyecto es un proyecto DLL, no se una lib. Y no hay libs creados de mis proyectos en absoluto (la solución completa).

¿Alguien tiene alguna idea de lo que está mal?

+0

¿Usted está consiguiendo el error de enlace en el proyecto DLL o en el proyecto de aplicación de consola? –

+0

El proyecto win32 en sí. Creo * que podría ser porque no todos los miembros de mi clase están declarados con la declaración __declspec (dllimport). – Darkenor

+0

ambos proyectos son proyectos win32. ¿Es el proyecto .dll o el .exe projet –

Respuesta

7

VS no crea una biblioteca de importación si dll no exporta realmente nada. Para comprobar rápidamente si ese es su caso, busque su dll, ábralo con dependency walker y vea si hay alguna exportación.

Si no encuentra exportaciones, compruebe si marcó algo para exportar: declarando clases/funciones como "__declspec (dllexport)" (cuando el encabezado está incluido en dll, dllimport cuando es incluido por exe) o extern "C "más el archivo de definición de módulo (.def).

+1

Para mí, el '__declspec (dllexport)' fue el remedio para mi problema. Espero que esta siga siendo la solución más avanzada en 2017 – Bernhard

2

Su proyecto .dll podría estar creando una importación .lib. Esto simplifica el uso de una DLL. Una .lib de importación es una biblioteca simple que tiene las mismas funciones que tu dll, pero no tiene la implementación: cuando la usas, carga el dll y luego reenvía las llamadas que realizas al dll.

O bien, el proyecto de consola podría creer que tiene una .lib importación - pero no lo hacen.

Las instrucciones para crear/usar un archivo DLL que tiene son un poco raras. No lo hago de esa manera (con el cuadro de diálogo Agregar referencias). Es posible que deba revisar la configuración de su proyecto y ver si ve alguna referencia a math.lib, o cualquier otra cosa sobre la creación de .lib de importación.

También, ver sus directorios de salida en el proyecto .dll y ver si se ha creado math.lib (o cualquier .lib).

0

Esto podría deberse a algo tan simple como la dependencia que podría haber agregado para su proyecto principal en los proyectos de DLL.

En Visual Studio 2008, la configuración se puede encontrar en: Project Dependencies y simplemente desactivando los proyectos DLL va a resolver el problema.

Además se puede verificar que: la ruta de la DLL 'de Lib ya no se incluyen en el 'enlazador' de línea de comandos de su proyecto principal en: Configuration Properties > Linker > Command Line

Cuestiones relacionadas