Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Miembros estáticos en dll's en Visual Studio Express

Iniciado por LC0, 18 de Septiembre de 2006, 04:06:52 PM

« anterior - próximo »

LC0

Tengo un pequeño problema que parece va a traerme (y me está trayendo) algunos quebraderos de cabeza:

El caso es que he creado una DLL y un proyecto paralelo para testearla. La biblioteca de la DLL tiene clases con miembros estáticos. Y he aquí el problema: Durante el enlazado, salta un error de que el miembro estático que se usa en el test no se encuentra:

Citar
Creating library C:\Documents and Settings\LC0\Mis documentos\hlgltest\Debug\hlgltest.lib and object C:\Documents and Settings\LC0\Mis documentos\hlgltest\Debug\hlgltest.exp
main.obj : error LNK2019: unresolved external symbol "private: static class hlgl::cPointer<class hlgl::Core> hlgl::Core::core" (?core@Core@hlgl@@0V?$cPointer@VCore@hlgl@@@2@A) referenced in function "public: static class hlgl::cPointer<class hlgl::Core> __cdecl hlgl::Core::getSingleton(void)" (?getSingleton@Core@hlgl@@SA?AV?$cPointer@VCore@hlgl@@@2@XZ)

Insertando el __declspec(dllexport) no sirve, el error sigue.

¿Alguna idea? (Que conste que es la primera vez que trato de compilar una DLL).

Esta es la declaración de la clase Core:


class Core
{
private:
DLLEXPORT Core(); //DLLEXPORT = __declspec(dllesxport)

DLLEXPORT static cPointer<Core> core; //<-El miembro estático problemático

//...
public:

DLLEXPORT void init(/*...*/);
DLLEXPORT void stop(/*...*/);
//...
}



De antemano, muchísimas gracias.

hotcamus

Imagino que en el proyecto de prueba te faltará por añadir el fichero ".lib" que se genera junto con la DLL.

LC0

Citar
Imagino que en el proyecto de prueba te faltará por añadir el fichero ".lib" que se genera junto con la DLL.

Si fuera eso, hubiera obtenido muchos más "unresolved symbols" :D.

El problema ya está resuelto. Lo que he hecho es quitar la implementación del método getSingleton en el fichero .h y ponerla en el .cpp (sin añadirle inline, para que deje de serlo).






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.