FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Paso de Array Dinamico a Procedimiento por Referencia.
Hola, tengo el siguiente problema y no encuentro solución:
Necesito pasar a un procedimiento un array dinamico y que este me lo devuelva relleno, para ello tengo un array dinamico de registros. El problema es que no se como devolver el array dinamico, dentro del procedure lo relleno bien y lo voy redimensionando pero no logro devolverlo :
La llamada al procedimiento:
y el procedimiento seria:
Mil Gracias. Última edición por dec fecha: 07-11-2008 a las 18:10:19. Razón: Añadir etiquetas DELPHI al código fuente |
#2
|
||||
|
||||
Has pensado obviar el puntero, es decir trabajar directamente con la variable reg?
__________________
self.free; |
#3
|
|||
|
|||
El problema es que si no me equivoco esa variable es un puntero a la variable, no es la propia variable. Por tanto no puedo redimensionarla con SetLenght me da error de tipo Invalido. Con este codigo obtengo la variable la utilizo pero no se como devolversela al procedimiento que la pasa.
Gracias, de todas maneras. |
#4
|
|||
|
|||
El problema que tengo es que no puedo redimensionar añadiendo nuevos registros con SetLength al array dinamico desde el procedimiento y pasarselo como parametro de salida.
He hecho mil pruebas y no encuentro la solucion si es que existe. Gracias. |
#5
|
|||
|
|||
Hola
asi funciona. Lei en algun sitio que delphi tiene ciertos inconvenientes al pasar arrays dinamicos como parametros. Quizas deba ser por eso que te fallase tu codigo (en principio no le veia fallo). saludos. Última edición por coso fecha: 08-11-2008 a las 10:46:34. |
#6
|
||||
|
||||
Delphi es un lenguaje de programación altamente tipificado, esto es, los tipos pasados por parámetros deben coincidir exactamente para que deje compilar.
Esto te obliga a usar buenas prácticas de programación como ha hecho coso
Al crear el tipo de datos en la zona interface, ya puedes usar ese tipo en todos los procedimientos de la unidad, y como el tipo de datos es el mismo, delphi te deja compilar perfectamente. Incluso te ayuda a no cometer errores, es decir, en un lado del programa defines un array de una forma, y después intentas pasarle un array de otra forma distinta, eso provocaría errores en ejecución. Si delphi fuerza a que declares los tipos iguales, minimiza los errores de tu programa. En cuanto a punteros y direcciones, debes saber que un array es ya un puntero a la primera posición de tu tabla, igual que tu "Form1" es un puntero a tu ventana TForm1. Delphi usa mucho los punteros, aunque los camufla de una forma elegante . Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
Muchisimas gracias, ha funcionado a la perfección.
Saludos. |
#8
|
||||
|
||||
¡Hola a todos!
Un par de cosas: No es necesario llamar al procedimiento SetLength con una longitud de 0 cuando la variable de arreglo dinámico todavía no tiene asignación de memoria alguna. Aunque se trate de variables locales, Delphi inicializa en ceros / Nil todas las variables que usan contadores de referencia, como es el caso de las cadenas largas y los arreglos dinámicos. Por otra parte, también podría definirse la rutina del ejemplo a manera de función en lugar de procedimiento:
Saludos. Al González. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Funcion Array Dinamico??? | franss | Varios | 4 | 28-08-2008 21:33:23 |
Array Dinamico | Gizhe | JAVA | 4 | 04-07-2008 20:39:46 |
Array Dinamico | VRO | Varios | 6 | 14-06-2005 12:40:16 |
Inicializar array dinamico | senpiterno | Varios | 2 | 08-09-2004 03:17:34 |
Array Dinamico | senpiterno | Varios | 4 | 22-07-2004 18:37:06 |
|