Ver Mensaje Individual
  #6  
Antiguo 28-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Otra cosa importante es que no estas inicializando los objetos que estas usando

sugarsoapPortType es una interface, es decir, para poder usarla, debes primero asignar una referencia a un objeto que imlpemente esa interface a la variable. De no hacerlo, la referencia contiene el valor nil. Cualquier metodo que quieras ejecutar sobre una interface que vale nil, produce un error en tiempo de ejecucion EAccessViolation

El wizard te genera automaticamente una funcion para crear esta interface, GetsugarsoapPortType

Para usar la interface deberias hacer algo como esto:

Código Delphi [-]
procedure blabla;
var
  ws: sugarsoapPortType;
begin
  ws := GetsugarsoapPortType;
  // ws ahora no vale nil y podes invocar sus metodos
end:

Esta misma "regla", se cumple para todos los tipos involucrados. Debes inicializarlos (crearlos, ya sea con un constructor, o con una funcion) y luego utilizarlos. Es cierto que existen los llamados "tipos primitivos" (Integer, string, record, etc) que si bien no es necesario resulta importante inicializarlos para darles un valor que tenga sentido:

Este codigo no da error, pero que valor tiene la variable I? No hay forma de saberlo ya que I va a tener el valor que estaba almacenado en la direccion de memoria que le fue asignado. Se dice en la jerga que el valor de I es "residuo"

Código Delphi [-]
procedure blabla;
var
  I: Integer;
begin
  ShowMessage(IntToStr(I));
end;

Hago enfasis en esto porque del mismo modo que invocas metodos sobre una interface sin antes inicializarla, y tambien le pasas parametros que no son inicializados

Por ejemplo, user_auth es una clase:

Código Delphi [-]
  user_auth = class(TRemotable)
  private
    Fuser_name: string;
    Fpassword: string;
  published
    property user_name: string  read Fuser_name write Fuser_name;
    property password:  string  read Fpassword write Fpassword;
  end;

Osea que debes inicializar una variable y luego tambien darle valores a sus propiedades internas (user_name y password, sino quedan como string vacios y quiza no tenga sentido, lo ideal seria darle valores concretos)
Responder Con Cita