Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Punteros a ARRAY

Bueno gente, necesito vuestro consejo. Aquí hablo del lenguaje C, pero no os asustéis porque la pregunta no va por ahí.

Tengo una librería DLL escrita en C que tiene varias funciones que utilizan o devuelven una lista (ARRAY). C utiliza punteros para estos casos, así que hice algo como:
Código Delphi [-]
PROGRAM ejemplo;
TYPE
  TLISTAptr = ^TLISTA;
  TLISTA = RECORD
    Campo: INTEGER;
    Otro: INTEGER;
  END;

FUNCTION obtiene_lista: TLISTAptr; CDECL; EXTERNAL 'libreria.dll';

VAR
  LaLista: TLISTAptr;
BEGIN
{ En un momento dado cojo y digo: }
  LaLista := obtiene_lista;
  WriteLn (LaLista[0]);
END.
Esto compila y funciona perfectamente con Free Pascal, pero me han dicho que falla en Delphi. Así que lo cambié por esto, pensando que iba a funcionar:
Código Delphi [-]
PROGRAM ejemplo;
TYPE
  TLISTAOBJptr = ^TLISTA;
  TLISTAOBJ = RECORD
    Campo: INTEGER;
    Otro: INTEGER;
  END;

  TLISTAptr = ^TLISTA;
  TLISTA = ARRAY OF TLISTAOBJ;
  

FUNCTION obtiene_lista: TLISTAptr; CDECL; EXTERNAL 'libreria.dll';

VAR
  LaLista: TLISTAptr;
BEGIN
{ En un momento dado cojo y digo: }
  LaLista := obtiene_lista;
  WriteLn (LaLista^[0]);
END.
Esto compila en Free Pascal pero me da un error 216 en tiempo de ejecución.

Sin embargo, el siguiente código parece funcionar en ambos entornos:
Código Delphi [-]
PROGRAM ejemplo;
TYPE
  TLISTAOBJptr = ^TLISTA;
  TLISTAOBJ = RECORD
    Campo: INTEGER;
    Otro: INTEGER;
  END;

  TLISTAptr = ^TLISTA;
  TLISTA = ARRAY [0..80] OF TLISTAOBJ;
  

FUNCTION obtiene_lista: TLISTAptr; CDECL; EXTERNAL 'libreria.dll';

VAR
  LaLista: TLISTAptr;
BEGIN
{ En un momento dado cojo y digo: }
  LaLista := obtiene_lista;
  WriteLn (LaLista^[0]);
END.
Pero esto no me interesa porque la lista puede tener tamaños muy variados y no es conveniente ponerle un tamaño predeterminado.

Lo que estoy pensando es utilizar dos definiciones distintas, una para Delphi y otra para Free Pascal. Para este último lo tengo claro, pero para Delphi no ¿Alguna idea de cómo trabajar con un puntero a una lista de tamaño variable que funcione en Delphi?

Gracias.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 15-11-2007 a las 15:21:08.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
uso de punteros David OOP 19 14-12-2009 09:48:37
Punteros davitcito Varios 2 25-04-2005 22:46:24
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
Punteros rafadrover OOP 8 18-09-2003 10:09:47


La franja horaria es GMT +2. Ahora son las 15:47:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi