Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error al crear objeto dentro de una clase (https://www.clubdelphi.com/foros/showthread.php?t=96583)

_Io 01-02-2024 10:53:19

Error al crear objeto dentro de una clase
 
Hola.

Tengo un problema y sinceramente no sé porque pasa, a ver si vosotros dais con la tecla.

Tengo esta clase, generada automáticamente desde un fichero wsdl:

Código Delphi [-]

AltaFactuSistemaFacturacion = class(SistemaFacturacionAltaFact)
  private
    FRegistroAltaFacturas: Array_Of_FacturasEmitidasType;
  public
    destructor Destroy; override;
  published
    property RegistroAltaFacturas: Array_Of_FacturasEmitidasType  Index (IS_UNBD) read FRegistroAltaFacturas write FRegistroAltaFacturas;
  end;

Cuando intento crear el objeto directamente desde un formulario, mediante cualquier evento, pulsar botón, create, etc.
funciona sin pegas.
Código Delphi [-]

procedure TForm1.UnProcedimieunto;
  var AltaFSF :SistemaFacturacionAltaFact
begin
....
  AltaFSF:=SistemaFacturacionAltaFact.create;
.......
end;


Pero si lo intento hacer dentro de una clase, me da error al ejecutar, lo compila perfectamente.
En este ejemplo, creo el objero de cMyClase y en el momento que llamo a UnMetodo, da error
de acces violation.

Código Delphi [-]

type

   cMyClase = class (TComponent)
   private
      AltaFSF :SistemaFacturacionAltaFact
   public
      procedure UnMetodo;
   end;

implementation

procedure cMyClase.UnMetodo;
begin
....
  AltaFSF:=SistemaFacturacionAltaFact.create;
.......
end;


Sabéis el motivo ??


Muchas Gracias.

Neftali [Germán.Estévez] 01-02-2024 12:36:45

Yo he probado un ejemplo sencillo con lo mismo que has puesto tú y me funciona sin problemas, como debe ser.
Está claro que algún código que no has puesto no funciona correctamente.


En estos casos lo más sencillo es, crear un pequeño programa de ejemplo con lo mínimo y donde se reproduzca el error, y adjuntarlo al mensaje para que los demás puedan probarlo y ver dónde está el problema.


La mayoría de las veces:
a) Al crear el ejemplo nos damos cuenta de algún error "tonto" que hemos cometido (a mi me pasa).
b) Los demás ven rápido el despiste.

_Io 01-02-2024 14:30:50

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 554277)
Yo he probado un ejemplo sencillo con lo mismo que has puesto tú y me funciona sin problemas, como debe ser.
Está claro que algún código que no has puesto no funciona correctamente.


En estos casos lo más sencillo es, crear un pequeño programa de ejemplo con lo mínimo y donde se reproduzca el error, y adjuntarlo al mensaje para que los demás puedan probarlo y ver dónde está el problema.


La mayoría de las veces:
a) Al crear el ejemplo nos damos cuenta de algún error "tonto" que hemos cometido (a mi me pasa).
b) Los demás ven rápido el despiste.

Hola.

Pues más razón que un santo.

He hecho un ejemplo muy simple y ha funcionado.

Pero también he conseguido reproducir el fallo.

Este código compila sin problemas, pero al ejecutar el método CreaObjeto, da error
Código Delphi [-]
type

  myClass = class (TComponent)
  private
    AltaFactuSistemaFacturacion :AltaFactuSistemaFacturacion;
  public
    procedure CreaObjeto;
  end;


implementation

procedure myClass.CreaObjeto;
begin
  try
    AltaFactuSistemaFacturacion:= AltaFactuSistemaFacturacion.Create;
  finally
    AltaFactuSistemaFacturacion.Free;
  end;
end;



Y Este código funciona, el problema estaba en el nombre de la variable, que coincidia con el tipo de datos.
Código Delphi [-]
type

  myClass = class (TComponent)
  private
    AltaFSF :AltaFactuSistemaFacturacion;
  public
    procedure CreaObjeto;
  end;


implementation

procedure myClass.CreaObjeto;
begin
  try
    AltaFSF:= AltaFactuSistemaFacturacion.Create;
  finally
    AltaFSF.Free;
  end;
end;

Muchas Gracias !!!!

Neftali [Germán.Estévez] 01-02-2024 15:54:21

Cita:

Empezado por _Io (Mensaje 554281)
Y Este código funciona, el problema estaba en el nombre de la variable, que coincidia con el tipo de datos.

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 20:45:44.

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