Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Definicion de arrays complejos (https://www.clubdelphi.com/foros/showthread.php?t=68927)

vejerf 15-07-2010 14:27:04

Definicion de arrays complejos
 
Buenas a tod@s,

Tengo el siguiente problemón.

Resulta que tengo q hacer uso de un servicio web que define un tipo complejo llamado Complejo y un array del tipo Complejo llamado ComplejoArray, es decir, define:
Código Delphi [-]
Complejo = class;
ComplejoArray = array of Complejo;

Al hacer uso del servicio web a través de su función Guardar_Complejo me arroja una excepción de 'Cuerpo de XML mal formado o con datos no esperados'. Estudiando la otra parte su código del servicio web para ver el por qué se arroja esta excepción ha visto que parseando un fichero bien formado y el mío existe la siguiente diferencia:

Código Delphi [-]
//Su fichero xml
(
     [item] =>  
 Array
             (
                        //Cuerpo de su array
             )
 
 )
//mi fichero xml
(
     [0] =>  Array
         (
                    //Cuerpo de mi array
        )
 
 )

Como se puede ver su fichero xml contiene la etiqueta item del que carece el mío. Me comenta que puede ser debido a q el tipo de array especificado para mi envío no sea del tipo correcto, es decir, del tipo ComplejoArray

La definición de la función que se usa es:
Código Delphi [-]
function Guardar_Complejo(const complejos: ComplejosArray): String; stdcall;

Yo por mi parte en mi código hago lo siguiente:
Código Delphi [-]
procedure UsarServicioWeb;
var
  VarComplejo : Complejo;
  ArrayVarComplejo : ComplejoArray;
begin
  VarComplejo := Complejo.Create;
  SetLength(ArrayVarComplejo,1);
  ArrayVarComplejo[0] := VarComplejo;
  Guardar_Complejos(ArrayVarComplejo);
end;

Es evidente que falta código y sólo pongo lo que creo relevante. No sé si es que defino mal el array ComplejoArray ya que la función recibe un parámetro const.

La verdad es que estoy muy despistado y no se que puede ser ya que es la primera vez que uso algo así.

Si alguien pudiese ayudarme estaría muy agradecido.

Gracias y un saludo a todos!!!

Jac fcc 15-07-2010 20:02:31

Cita:

No sé si es que defino mal el array ComplejoArray ya que la función recibe un parámetro const.
En lo personal he trabajado con Arrays y la manera de pasar los parámetros para evitar errores es enviando una variable.
¿por que no crear tu funcion asi? :
function Guardar_Complejo(complejos: ComplejosArray): String; stdcall;


donde complejos se crea justo como indicas.

vejerf 19-07-2010 10:29:34

Hola Jac fcc,

Gracias por tu aportación. Probé tu posible solución pero me seguía dando el mismo error.

Al final y tras mucho calentarse uno la cabeza hemos podido ver que el error no estaba en la definición del array sino en el propio funcionamiento de delphi.

Me explico. Yo lo que tenía que hacer es consumir un servicio web. Los servicios web se basan en el intercambio de mensajes xml. Al yo importar el servicio web se me importaba una funciónn a la que había que llamar y pasarle como parámetro el array complejo. La llamada a esta función me creaba de forma transparente a mi el mensaje xml y este mensaje xml no estaba exactamente en el formato que se esperaba en el otro extremo y de ahí la excepción.

Como conclusión el array estaba bien definido y era el mensaje xml el que estaba mal definido por así decirlo.

Otra posible solución sería crear yo el mensaje xml y hacer un post http aunque esto es ya otro tema de debate que tendré que ver como se hace.

Muchas gracias y un saludo!!!

Jac fcc 20-07-2010 20:50:42

pendiente
 
muy interesante vejerf,
estaré pendiente de tu solucion,
por el momento no estoy en el ambiente web, pero lo haré muy pronto
y como siempre se aprende mucho de todos los chicos del Foro.


La franja horaria es GMT +2. Ahora son las 09:37:30.

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