Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Hasta Los Oo De Las Dll...

Iniciado por MChiz, 01 de Agosto de 2003, 10:08:59 PM

« anterior - próximo »

MChiz

 Hola!!

Estoy harto de las DLLs  (nooo)!!

Alguien sabe como hacer un new desde una DLL y poder hacer su correspondiente delete desde fuera de esta?

: ((((((((

Muchas gracias!!

tamat

 veo que estamos los dos igual, yo por suerte he orientado todo mi sistema para evitar ese caso aunque se sigue dando, ya veremos que pasa...
Por un stratos menos tenso

MA]Mestre

 http://www.stratos-ad.com/forums/index.php...t=ST&f=8&t=2251


Si no le tubierais tanta mania a las Apis...  (twist)  VirtualAlloc VirtualFree. No hay otra forma te lo aseguro. Es la arquitectura.


Un saludo

Grugnorr

 Te iba a decir que no se puede, pero parece que sí según MA]Mestre. Lo que se suele hacer es que la propia dll se encargue de su memoria dinámica. En COM los objetos usan Reference Counting para ello, tú llamas a Release() desde la aplicación, pero el delete se ejecuta en la dll...


Que caso tienes que necesitas liberar la memoria desde fuera de la dll?.
hat the hells!

MChiz

 Buenas!

Pues Grugnorr, necesito el caso es que necesito liberar memoria que reserva la DLL : PPPP Me da un poco de palillo hacerlo como los COM esos... pero muchas gracias! : )

MA]Mestre, pero si uso VirtualAlloc no se van a llamar a constructores y esas cosas, no?

Un saludote!

MA]Mestre

 Bueno, lo primero perdir disculpas, pues un "ente" ( no se si llamarlo amigo  :( , pero no lo citare pq no estoy seguro de que quiera estar citado  ) me abrio los ojos, pues estaba equivocado. Las DLL que crean heap son las antiguas de 16bits. Las DLL actuales no disponen de heap.   :ph34r:

Por otro lado el problema es casi el mismo, pues entre la DLL y la APP se crean instancias del C Run-Time independientes para cada una de ellas. Lo que no nos permite desde el APP liberar memoria reservada en el heap de la C-Run-Time de la DLL. Para que la DLL y la APP compartan la misma "copia" de la C Run-Time se debe compilar con la opción /MD ambas. Desde el Vc 6.0 Project->Settings -> MultipleThreaded DLL.

Un saludo.

MA]Mestre

 Project->Settings -> C/C++ -> CondeGeneration -> MultipleThreaded DLL


Un saludo.

MChiz

 mmm... no entiendo del todo.
Hay que poner MultiThread DLL a TODO o solo a la DLL? Entonces habria que poner la APP en MultiThread ( sin DLL ), no? Y para acabar, esto es para VS.NET o VS6?

Muchas gracias por la info!!

ethernet

Cita de: "MChiz"MA]Mestre, pero si uso VirtualAlloc no se van a llamar a constructores y esas cosas, no?
Si sobrecargas new y delete se llamaran a los destructores y constructores perfectamente (con esas funciones, se entiende)

saludos

tamat

 Ostias, y esto? lo acabo de encontrar en las MSDN, no es la solución a nuestros problemas?  (genial)

LoadLibraryEx

The LoadLibraryEx function maps the specified executable module into the address space of the calling process. The executable module can be a .dll or an .exe file. The specified module may cause other modules to be mapped into the address space.



Ah, y otra cosa, yo compilo todo mi proyecto en Multithreaded DLL y seguía teniendo algunos problemas aunque no tan heavys como lo que parece que le sucede a MChiz. Los mios venian más que nada por las STL pero con las STLport el problema ha desaparecido, ni rastro, (y mi marido a dejado de roncar).
Por un stratos menos tenso

MA]Mestre

 
CitarHay que poner MultiThread DLL a TODO o solo a la DLL?

A todo. De nada serviria que uno de ellos creara una copia del CRT para el.

CitarY para acabar, esto es para VS.NET o VS6?

Yo lo uso en VS6, pero es lo mismo para .NET.

Echale un vistazo a... http://support.microsoft.com/default.aspx?...&NoWebContent=1


Un saludo.

MChiz

 MWAHAHAHAHA!! He creado un monstruoooo! : PPPPPPP
Muchas gracias MA]Mestre!! Ya me funciona!! : )
Ya te debo una ( le debo un monton a mucha gente :b )

MA]Mestre

 Me alegro que resolvieras el problema  (uoh)

DLL Rules !!!!  B)







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.