Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Que Asco De Dll's No?

Iniciado por Helius, 04 de Agosto de 2003, 06:58:28 PM

« anterior - próximo »

Helius

 Joer, aki todo el mundo esta pegandose duro con las dlls y no parecen ser muy amistosas... :D

Pues a ver, yo también. Estoy intentando pasar mi motor de un libreria estatica a una dinamica y tengo el siguiente problema. En una clase tengo una lista estatica con stl y al compilar me salta un warning:

class DLL_EXPORT IMMObject
{
   private:
       static IMMObject * liveObjects;
       static IMMObject * deadObjects;
       IMMObject *nextObject;
       IMMObject *prevObject;
       long refCount;
       bool bIsStackAllocated;
       static std::list<IMMObject*> heapObjects;
   protected:
       IMMObject();
       virtual ~IMMObject();
   public:
       void AddRef();
       void Release();
       static void CollectGarbage();
       static void CollectRemainingObjects(bool bEmitWarnings=false);
       virtual unsigned long size()=0;
       void *operator new(size_t size);
       void operator delete(void* obj);
};


y resulta que me da este warning extraño:

warning C4251: 'Hydra::IMMObject::heapObjects' : class 'std::list<_Ty,_Ax>' necesita tener una interfaz DLL para que la utilicen los clientes de class 'Hydra::IMMObject'

Alguien sabe que demonios significa???
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

Zaelsius

Esta es la ayuda de VS.NET sobre ese warning:

CitarUna clase base o estructura deben declararse con la palabra clave __declspec(dllexport) para que se pueda exportar una función de una clase derivada.

Yo lo que entiendo es que si no declaras el tipo std::list<> como exportable desde la dll, no se podria derivar de esa clase desde la aplicacion cliente, ya que el tipo std::list no ha sido exportado y no es accesible.

Si intentas derivar y te da error, pues era eso.

Es lo que me ha venido en 2º lugar a la cabeza(lo primero era una tonteria XD)

Ahora, el cómo evitar el warning de manera elegante ya lo dejo en manos de cada uno :)

Edit: acentos arreglados, :)

ethernet

 No son las DLL's son los usuarios q las usan. Ha habido en una semana 3 ó 4 post exactamente iguales. Como ya dije en otro post usar STL y DLL's es un infierno. Si te paras 5 segundos y miras en google encuentras las respuestas:

http://www.experts-exchange.com/Programmin...Q_20250383.html

http://beta.experts-exchange.com/Programmi...Q_20279246.html


HOWTO: Exporting STL Components Inside & Outside of a Class:

http://support.microsoft.com/default.aspx?...&NoWebContent=1


Casi con voy a tener suerte consigues todo eso.

Por otra parte siempre he creido q en las dll's lo ideal es meter la implementacion y que el interface sea una clase virtual pura de manera que evitas tener esos problemas con STL y otras clases con templates y variables static.

saludos

Zaelsius

 Me quedo con esto (del enlace de microsoft):

CitarIf the class you are exporting has one or more base classes, then you must export the base classes as well. If the class you are exporting contains data members that are of class type, then you must export the classes of the data members as well.

Es el mismo problema que tienen algunos motores3d/librerias que no utilizan clases propias para los vectores/matrices, dando warnings acerca de D3DXVECTOR, etc.






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.