PDA

Ver la Versión Completa : Error al crear objeto dentro de una clase


_Io
01-02-2024, 10:53:19
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:



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.


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.



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
;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

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.

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
Y Este código funciona, el problema estaba en el nombre de la variable, que coincidia con el tipo de datos.
^\||/^\||/^\||/