![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Liberar stream en función
Buenas a tod@s.
Trabajando en el tema del QR para VeriFactu he hecho una función para generarlo y devolvérmelo en modo stream para guardarlo en la tabla e imprimirlo en la factura posteriormente. El tema es que he creado una función aprovechando y retocando un componente que publicó el compañero escafandra en otro foro tal que así:
En la que la llamo con el texto del QR y me devuelve un stream con la imagen. Hasta aquí todo bien. El problema es si le hago un "Free" a la variable Stream que previamente he creado, he asignado y luego he igualado "Result" a ella. Si hago el "Free" me da un error y si lo quito funciona bien pero no sé si eso irá consumiendo memoria en cada llamada hasta el infinito y más allá. Alguien me podría decir si no hago el "Free" tendré problemas de memoria o si se libera solo de alguna manera, o en caso contrario, cómo puedo liberarlo sin que me de error. Gracias y un saludo.
__________________
Be water my friend. |
#2
|
|||
|
|||
Aunque esa variable "Stream" es local y debería finalizar al final de la función, pero en todo caso intenta poner esa linea:
La declaras fuera de esa función como publico y luego le aplicas el free desde afuera de la función. Me parece que el error es porque destruyes el objeto dentro de la función. Última edición por marco3k fecha: 20-06-2024 a las 15:02:51. |
#3
|
||||
|
||||
Yo soy de los que piensa que quien crea las cosas es quien debe ser resposable de destruirlas, así que yo optaría por crear y destruir el Stream en el mismo sitio.
Cambia la definición a algo como esto:
Y la llamada de esta forma...
Y en el procedimiento usar el parámetro QRImage, en lugar del result.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Gracias marco3k y Germán.
Realmente las dos sugerencias van por el mismo camino, la diferencia es dónde crear y liberar la variable. Al final he optado por la de Germán, prefiero usar variables locales siempre que sea posible. Gracias y un saludo.
__________________
Be water my friend. |
#5
|
||||
|
||||
Date cuenta de una cosa, la función que muestras DameQRIMG devuelve el Stream que ha creado ella misma. Si al salir lo destruye, estas devolviendo un stream inválido que ya no existe. Deberá ser destruido por la función llamadora y para apoyar la idea, tu función debería llamarse algo como CreateQRStream. De esta forma ya indica que el Stream devuelto deberá ser destruido por la función llamadora.
La idea de Neftali va por el mismo camino, sólo que es la función llamadora la que suministra el Stream ya creado. Saludos. |
#6
|
||||
|
||||
Cita:
Gracias compañero y gracias de nuevo por el componente, práctico y fácil de implementar. La verdad es que estoy algo "atontao" como siempre y, en vez de modificar nuestro reporteador para directamente imprimir cualquier qr usando tu componente, me he mareado creando la imagen y guardándola en el registro para después imprimirla como imagen ![]() Saludos.
__________________
Be water my friend. |
#7
|
||||
|
||||
El componente tiene otra versión para QReport derivado de TQRImage que está enfocado para la impresión de reportes. Si es tu caso, quizás te resulte más útil esa versión.
Saludos. |
#8
|
||||
|
||||
![]() Gracias y un saludo.
__________________
Be water my friend. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Stream webcam | walito | API de Windows | 2 | 27-04-2010 15:21:57 |
MD5 de un Stream. | JXJ | Varios | 3 | 03-10-2007 18:52:40 |
Stream a TImage | eframtz | Gráficos | 4 | 20-04-2007 04:55:06 |
Puntero a Stream | Enan0 | Varios | 3 | 22-03-2005 22:08:13 |
Optener un Stream como "Result" en una funcion | sitrico | Varios | 3 | 24-11-2004 22:06:38 |
![]() |
|