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!!
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...
http://www.stratos-ad.com/forums/index.php...t=ST&f=8&t=2251Si no le tubierais tanta mania a las Apis... (twist) VirtualAlloc VirtualFree. No hay otra forma te lo aseguro. Es la arquitectura.
Un saludo
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?.
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!
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.
Project->Settings -> C/C++ -> CondeGeneration -> MultipleThreaded DLL
Un saludo.
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!!
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
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).
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=1Un saludo.
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 )
Me alegro que resolvieras el problema (uoh)
DLL Rules !!!! B)