Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2008
noodle_ noodle_ is offline
Registrado
 
Registrado: sep 2007
Posts: 8
Poder: 0
noodle_ Va por buen camino
problemas con array o array

estoy trabajando con webservices axis y necesito acceder a la respuesta de metodos que devuelven un tipo de dato Map (en java), ya los importe ahora no se como acceder a la informacion, la unidad que se genera es esta
Código Delphi [-]
type
  mapItem              = class;            
  mapItem = class(TRemotable)
  private
    Fkey: Variant;
    Fvalue: Variant;
  published
    property key: Variant read Fkey write Fkey;
    property value: Variant read Fvalue write Fvalue;
  end;

  Map        = array of mapItem;                
  ArrayOf_apachesoap_Map = array of Map;  
  Libretas = interface(IInvokable)
  ['{BC06A486-31BC-4F8E-303C-8640EC78FA68}']
  function  listarPlanes: ArrayOf_apachesoap_Map; stdcall;
ahora intente hacer lo sigt para ver la informacion
Código Delphi [-]
var RIO:THTTPRIO;
puerto:Libretas;
lista:ArrayOf_apachesoap_Map;
m:Map;
mi:mapItem;
begin
  RIO:=THTTPRIO.Create(nil);
  RIO.URL:= 'http://127.0.0.1:8080/axis/Libretas.jws';
  RIO.WSDLLocation:= 'http://127.0.0.1:8080/axis/Libretas.jws?WSDL';
  RIO.Service:= 'LibretasService';
  RIO.Port:='Libretas';
  puerto:=RIO as Libretas;
  lista:=puerto.listarPlanes;
  m:=lista[0];
  mi:=m[0] as TRemotable;
  ShowMessage(mi.value);
deja compilar pero al ejecutarlo en esta parte sale mensaje de excepcion "acces violation", no se si el problema esta con los arrays creo q estoy accediendo mal, el ejemplo del metodo listarPlanes devuelve mas de un registro.
Gracias de antemano.

Última edición por noodle_ fecha: 19-06-2008 a las 15:47:21.
Responder Con Cita
  #2  
Antiguo 19-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
debes dar memoria a los dos arrays, ya que no indicas en tiempo de diseño su tamaño. De la manera que lo tienes ahora mismo, son 'punteros nulos'. Prueba con hacer algo antes de usar las variables como

Código Delphi [-]
   getmem(m,numero_de_maps_que_necesitas*sizeof(mapItem);
   ...
   freemem(m);

lo mismo con el otro array dinamico.

PD: por cierto , estas haciendo dobles arrays dinamicos. Ya es eso lo que necesitas?

Última edición por coso fecha: 19-06-2008 a las 16:47:42.
Responder Con Cita
  #3  
Antiguo 19-06-2008
noodle_ noodle_ is offline
Registrado
 
Registrado: sep 2007
Posts: 8
Poder: 0
noodle_ Va por buen camino
Gracias por el interes, intente lo que me sujeriste pero sigue saliendo el mismo error, tambien intente con setLength.
Código Delphi [-]
  puerto:=RIO as Libretas;
  GetMem(lista,50*SizeOf(Map));
  lista:=puerto.listarPlanes;
  GetMem(m,50*SizeOf(mapItem));
  m:=lista[0];
  mi:=m[0] as TRemotable;
  ShowMessage(mi.value);
el error se da en el momento en que invoco al metodo listarPlanes, espero mas respuestas gracias.

Última edición por noodle_ fecha: 19-06-2008 a las 20:48:56.
Responder Con Cita
  #4  
Antiguo 19-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
que tipo de dato te devuelve prueba.ListarPlanes?

no asignes memoria a 'lista' a ver ...
Responder Con Cita
  #5  
Antiguo 19-06-2008
noodle_ noodle_ is offline
Registrado
 
Registrado: sep 2007
Posts: 8
Poder: 0
noodle_ Va por buen camino
dicho anteriormente la descripcion de los tipos de datos la genera delphi cuando importo el xml o el wsdl del webservice y es la sgt
Código Delphi [-]
type
  mapItem              = class;
  mapItem = class(TRemotable)
  private
    Fkey: Variant;
    Fvalue: Variant;
  published
    property key: Variant read Fkey write Fkey;
    property value: Variant read Fvalue write Fvalue;
  end;
  Map        = array of mapItem;                
  ArrayOf_apachesoap_Map = array of Map;

function  listarPlanes: ArrayOf_apachesoap_Map; stdcall;
listarPlanes devuelve ArrayOf_apachesoap_Map que es un array de Map y Map es un array de objetos del tipo mapItem, espero haber resuelto la duda, probe al no reservar memoria a lista pero no solucione el problema.
Responder Con Cita
  #6  
Antiguo 19-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
y sabes seguro si son 50 el numero que vas a necesitar?
Responder Con Cita
  #7  
Antiguo 19-06-2008
noodle_ noodle_ is offline
Registrado
 
Registrado: sep 2007
Posts: 8
Poder: 0
noodle_ Va por buen camino
el numero de respuestas que devuelve es 16, tambien intente con ese valor pero no me soluciono nada.
Responder Con Cita
  #8  
Antiguo 19-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
vale...

Código Delphi [-]
 
   puerto:=RIO as Libretas;
 
   try 
     GetMem(lista,num_elems*sizeof(map));
     for i := 0 to num_elementos_lista do
// asignamos memoria a cada uno de los elementos (que son tambien arrays dinamicos) de lista
     GetMem(lista[i],num_maps*sizeof(mapItem)); 
   except
   ...
   end;

  lista:=puerto.listarPlanes;
  GetMem(m,50*SizeOf(mapItem));
  m:=lista[0];
  mi:=m[0] as TRemotable;
  ShowMessage(mi.value);

prueba con esto.

PD: prueba tambien con el setlenght
PDD : tendras que liberar tambien, antes que al objeto lista, todos y cada uno de sus elementos

Última edición por coso fecha: 19-06-2008 a las 22:37:01.
Responder Con Cita
Respuesta



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
Un array con problemas Cecilio OOP 5 15-08-2007 18:30:55
Problemas con el array CottonMouth OOP 2 06-07-2007 05:40:30
BMP en un array lacatella Gráficos 2 27-07-2006 20:36:27
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
problemas con format y array!!! adfa OOP 2 30-08-2003 03:18:29


La franja horaria es GMT +2. Ahora son las 09:38:51.


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