Pregunta

Tengo un h- y un archivo CPP con algunos cálculos utilizados en muchas de mis proyectos.

Ahora he tratado de ponerlos en un archivo DLL separado, por lo que los archivos no deben ser incluidos en cada proyecto.

Cuando se enlaza consigo un error LNK2001 (símbolo sin resolver) para una estructura, sin embargo lib y DLL están en el lugar correcto.

Yo uso el

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

macro, que funciona bien para un par de métodos.

El struct se define como esa

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

Y en los archivos que utilizan esta estructura de la DLL su también define correctamente (?)

extern uTSystem ABC;

El mensaje de error es:

error LNK2001: Nichtaufgeloestes externes Symbol "struct uTSystem ABC" (?ABC@@3UuTSystem@@A)

¿Alguna pista? Gracias

¿Fue útil?

Solución

Si se asume que ha definido TOOLS_EXPORT al compilar el archivo DLL se exportará la variable ABC. En el código se define como extern uTSystem ABC; eso está bien para el archivo de cabecera, que comparte con la DLL que consume.

Mientras que el extern declara que existe una variable de ABC debe definirlo en una de su archivo .cpp:

uTSystem ABC;

sin la extern delante. Su archivo podría tener este aspecto:

---- ---- Tools.h

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

extern uTSystem ABC;

---- ---- tools.cpp

#include tools.h

uTSystem ABC;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top