Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: MChiz en 01 de Agosto de 2003, 10:08:59 PM

Título: Hasta Los Oo De Las Dll...
Publicado por: MChiz en 01 de Agosto de 2003, 10:08:59 PM
 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!!
Título: Hasta Los Oo De Las Dll...
Publicado por: tamat en 02 de Agosto de 2003, 01:56:01 AM
 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...
Título: Hasta Los Oo De Las Dll...
Publicado por: MA]Mestre en 02 de Agosto de 2003, 03:05:22 AM
 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
Título: Hasta Los Oo De Las Dll...
Publicado por: Grugnorr en 02 de Agosto de 2003, 11:40:31 AM
 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?.
Título: Hasta Los Oo De Las Dll...
Publicado por: MChiz en 03 de Agosto de 2003, 03:46:34 PM
 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!
Título: Hasta Los Oo De Las Dll...
Publicado por: MA]Mestre en 03 de Agosto de 2003, 05:37:30 PM
 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.
Título: Hasta Los Oo De Las Dll...
Publicado por: MA]Mestre en 03 de Agosto de 2003, 07:19:47 PM
 Project->Settings -> C/C++ -> CondeGeneration -> MultipleThreaded DLL


Un saludo.
Título: Hasta Los Oo De Las Dll...
Publicado por: MChiz en 03 de Agosto de 2003, 10:14:24 PM
 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!!
Título: Hasta Los Oo De Las Dll...
Publicado por: ethernet en 04 de Agosto de 2003, 07:13:55 AM
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
Título: Hasta Los Oo De Las Dll...
Publicado por: tamat en 04 de Agosto de 2003, 03:50:46 PM
 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).
Título: Hasta Los Oo De Las Dll...
Publicado por: MA]Mestre en 04 de Agosto de 2003, 06:23:25 PM
 
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.
Título: Hasta Los Oo De Las Dll...
Publicado por: MChiz en 04 de Agosto de 2003, 08:58:44 PM
 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 )
Título: Hasta Los Oo De Las Dll...
Publicado por: MA]Mestre en 05 de Agosto de 2003, 08:02:51 PM
 Me alegro que resolvieras el problema  (uoh)

DLL Rules !!!!  B)