Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas Creando Dll

Iniciado por AgeR, 10 de Octubre de 2003, 10:18:50 PM

« anterior - próximo »

AgeR

 Pues eso, que seguramente será alguna tontería, pero no encuentro lo que hago mal. Nunca he hecho una dll y me está dando bastantes quebraderos de cabeza.

El problema es que haga lo que haga, cuando hago un programita de test no me importa las funciones. (Las clases sí que parece que me las exporta/importa bien). En concreto el problema está en el "matematicas.cpp". A ver si me podéis ayudar.

Codigo fuente

Venga, gracias!

Saludos!

Zaelsius

 Ager, verás que si incluyes esto al comienzo de matematica.h ya compila:

Citar
#ifdef AGE_EXPORTS
#define AGE_API __declspec(dllexport)
#else
#define AGE_API __declspec(dllimport)
#endif

La cuestión es que ese trozo de código debe ser común a todos los archivos donde se declaren clases que exportas. Puedes crear un .h(llamémoslo "mylib.h") con ese código e incluirlo desde todos los .h de clases exportadas.

Lo suyo es que "mylib.h" sea el mismo archivo que incluyan luego los usuarios de la libreria. Para permitir eso, en todos los .cpp de la DLL donde exportes funciones o clases, intenta mantener esta estructura

Citar

// foo.cpp

#define AGE_EXPORTS
#include "foo.h"


Eso deberia funcionar  :P  

AgeR

 El caso es que ya lo he probado y no me compila.
Me da el siguiente error :

Compiling...
Matematicas.cpp
e:\andor proyectos\age\matematicas.cpp(23) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

age.dll - 1 error(s), 0 warning(s)

La verdad es que nunca me había encontrado con este error  :huh: .
A alguien le compila? La cosa esta me está sacando de quicio ya, la verdad  (nooo) .

Gracias!

BeRSeRKeR

 Creo que en todos los archivos cpp tienes que incluir la cabecera "stdafx.h" ya que estás utilizando precompiled headers.

Saludos
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

AgeR

 BeRSeRKeR, pues parece que efectivamente era eso. En la vida había usado el stdafx ese.

En fin, muchas gracias a ambos!  (ole)  

Zaelsius

 Lo siento Ager, yo tb corregí eso pero se me olvidó mencionarlo  :P  

ethernet

 Si no sabes para q sirven las precompilated headers es mejor q las desactives en project->settings pestaña c++ y despues seleccionas precompilted headers en las opciones y selñalas el circulito de no usar pch. Cuando tengas codigos mas grandes - normalmente con templates y cosas asi - notaras q si usas pch todo recompila muchisimo mas rapido.

Otro metodo para indicar que funciones exportas es con un fichero .def que es compatible con otros compiladores. Si no recuerdo mal en c.conclase.net te enseñan a hacerlo, pero no estoy seguro :/



saludos

AgeR

 Perfecto, ya están desactivadas. La verdad es que para el proyecto este (un motorcillo) tampoco uso nada del otro mundo, así que no creo que ahorre mucho tiempo al compilar con las precompiled headers.

Lo de los .def ya lo había mirado por ahí, y de hecho en casi todos los tutoriales o artículos sobre dlls lo comentan. Tampoco sabía lo de la compatibilidad con otros compiladores.

Muchas gracias a todos!  (ole)  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.