Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: LC0 en 18 de Septiembre de 2006, 04:06:52 PM

Título: Miembros estáticos en dll's en Visual Studio Express
Publicado por: LC0 en 18 de Septiembre de 2006, 04:06:52 PM
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.
Título: Miembros estáticos en dll's en Visual Studio Express
Publicado por: hotcamus en 19 de Septiembre de 2006, 03:51:56 PM
Imagino que en el proyecto de prueba te faltará por añadir el fichero ".lib" que se genera junto con la DLL.
Título: Miembros estáticos en dll's en Visual Studio Express
Publicado por: LC0 en 19 de Septiembre de 2006, 03:56:00 PM
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).