Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Singletones Y Dll's

Iniciado por O2, 23 de Julio de 2003, 01:19:59 PM

« anterior - próximo »

MChiz

 Hola MA]Mestre!!

He probado el codigo y no da resultado : ( Quizas es que hago algo mal.

Lo que yo hago es poner la variable entre los pragma data_seg( ) y luego el pragma del comment linker en el CPP de la DLL. Es asi? Tienes algun ejemplo o articulo donde lo pueda ver?

Muchas graciaaaaaas : )

MA]Mestre

 puedes postear el codigo del "pragma data_seg", y donde haces el if para mirar si existe el objeto. ?

Un saludo.

P.D: No hay URL ni nada, lo lei hace algunos años de no se que libro. Pero funciona seguro, pq lo probe por entonces y funciono.

MChiz

 A que te refieres con 'el if para mirar si existe el objeto'? Te refieres al Singleton?

MA]Mestre

 Si xD

P.D: Si te conectas esta noche a irc lo miramos de resolver, llamame aunque este mestrOFF.

ethernet

 Aunque este MestreOFF y este continuamente poniendo mensajitos de away indicando que no esta XDD ;@

O2

 Buenas de nuevo:

Bueno, con esto del veranito, irse a bañar y demas, ultimamente no programo nada...

En fin, si recordais tenia un problema con un singleton usandolo desde una DLL.

Es más o menos lo que deciais, pero en mi caso si que se exactamente donde esta el problema:

Tengo un proyecto de DLL, donde esta tanto el singleton, como las clases "singletonizadas", que genera el .dll y .lib correspondiente. Hasta aqui bien.

Luego tengo otro proyecto que uso de test de la DLL.

No se como usais vosotros la DLL desde otro proyecto, pero yo lo hago de la forma más cutre posible: cargo la .lib en tiempo de compilación con un #pragma comment(lib,"Libreria.lib") y el ejecutable resultante ya se encarga de usar la dll correspondiente.

En el test que uso para probar la DLL, a parte de la lib, necesito el "Libreria.h" que contenga las declaraciones de todo lo que la DLL exporta, y aqui esta el problema. Al ser el Singleton un template, tengo que incluir la implementación entera en el "Libreria.h"

De esta forma, si desde "Test.cpp" hago un CWindow::GetInstance() obtendre la instancia del singleton de "Libreria.h", mientras que si desde dentro de la DLL se hace un CWindow::GetInstance() se obtendra una nueva instancia del singleton que reside en la DLL.

¿Como puedo solucionar esto?

Hay alguna manera de no tener que incluir la implementación entera del template singleton en el Libreria.h?

Probe a dejarlo asi:

template<class Type> class CSingleton;

class CWindow : public CSingleton<CWindow> { ... };


Pero obviamente me dice que no puedo usar una clase indefinida como base de CWindow.

Hay alguna forma de no tener que usar un Libreria.h con todas las declaraciones de lo que contiene la DLL? Supongo que no...

Por otro lado mi DLL no tiene DllMain() ni nada de eso, simplemente contiene todas las clases y funciones "a pelo" ¿Que diferencia hay?

Muchas gracias.

Un saludo!

Mars Attacks

Cita de: "MAMestre"] ¿ pq no cambias el mensaje y lo adjudicas a tu nombre ? ¿ pq total ya no es mio ?


P.D: Yo tampoco me he podido resistir.
O.T.: No puedo adjudicarlo a mi nombre. De todas formas no he cambiado su contenido, sólo su "presentación".
Mil perdones si te he causado alguna molestia, no es mi intención  :ph34r:


MA]Mestre

 O2, no entiendo muy bien cual es tu problema, pero creo intuir que GetProcAddress te puede ayudar. Echale un vistazo.

offtopic:
Mars Attacks De todas formas no he cambiado su contenido, sólo su "presentación"
claro claro... y era necesario un offtopic, claro claro... ...escribire mal, sere coder, pero se soluciono el problema.

P.D: El del caché rayado.






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.