PDA

Ver la Versión Completa : Problemas al crear un objeto en tiempo de ejecución


vejerf
12-02-2007, 14:27:12
Buenas de nuevo...
tengo el siguiente problemilla a la hora de ejecutar la aplicación que estoy desarrollando. El problema es el siguiente:
tengo unos componentes llamados TVaComm para el manejo del puerto serie y he de crearlos en tiempo de ejecución xq a priori no sé cuantos necesitaré. Para ello tengo una tabla de una estructura q entre sus campos cuenta con uno de estos elementos. Intento crearlos del siguiente modo:

Modems[N].PuertoSerie.create(self);

siendo Modems la estructura q he nombrado antes, N el índice, y PuertoSerie el nombre del campo de la estructura de tipo TVaComm. Cuando se ejecuta esa línea me da el siguiente error:

"First chance exception at $7C812A5B. Exception class EAccessViolation with message 'Access violation at address 0047B331 in module 'HORUS.exe'. Read of address 00000000'. Process HORUS.exe (2384)"

Alguien puede decirme q estoy haciendo mal a la hora de crear el objeto???

Muchas gracias!!!

fdelamo
12-02-2007, 15:06:39
Hola vejerf,

La sintaxis de las llamadas a constructores es Objeto := Clase.Constructor;
creo que lo estás poniendo mal, sería una cosa así:
Modems[N].PuertoSerie := ClasePuertoSerie.Create(Self);

Saludos

Lepe
12-02-2007, 15:36:09
Si vas a usar Objetos y además necesitas hacerlo en tiempo de ejecución, te sugiero una búsqueda de TObjectList en el foro.

Tal y como existe array of integer, para tipos de datos simples (integer, char, etc), existe el TObjectList para objetos.

Saludos

vejerf
12-02-2007, 16:15:54
Muchas gracias por vuestras respuestas!!!
Con la respuesta de fdelamo lo he solucionado... era un problema de sintaxis... es q del dia a la mañana me he encontrado programando delphi sin saber... y eso es lo q tiene...
En cuanto a tu respuesta Lepe lo mismo es hasta mas elegante que lo q yo hago... pero x ahora como me funciona con lo otro creo q es suficiente...

Muchas gracias!!!

Lepe
13-02-2007, 10:57:49
Si te funciona no lo toques .... jejeje.

El caso es que... digamos te abstraes de ciertas tareas, te quita de problemas y además el código es más elegante y claro.

Por ejemplo buscar un TAVcom (no recuerdo bien el nombre), pero con TObjectList tienes un método IndexOf (igual que un TStringList) para buscar uno de esos objetos.

También te olvidas de agrandar y acortar el array, ya que encapsula ese comportamiento.

No tendrás que mirar si uno de esos apunta a nil porque ya se ha liberado de memoria, porque también lo controla.

Con esto no quiero decir que cambies tu código, solo que lo tengas en cuenta para la próxima vez, hay hilos a modo de tutorial, de como usar un TObjectList (http://www.clubdelphi.com/foros/showthread.php?t=18114&highlight=tobjectlist)

Saludos

vejerf
13-02-2007, 12:28:46
Pues sabes q me ha gustao la idea esa del TObjectList aunq x mucho q me haya gustao no voy a modifica el código jeje... más vale prevenir :D ... pero sí q lo tendré en cuenta pa el futuro. Se agradece mucho la colaboración Lepe... la verdad es q estoy aprendiendo tela gracias a los miembros del foro :p ...

Muchas gracias y prometo seguir dando la lata con mis preguntas jeje