PDA

Ver la Versión Completa : Instanciar Clase


buildero_d
04-10-2006, 23:09:01
Que tal Colegas...

He estado tratando de crear una instancia una clase que he diseñado pero desde código.

Esta clase hereda de una clase abstracta y ésta es la definición
Clase abstracta:

#ifndef ProcesoH
#define ProcesoH
#include <vcl.h>
//---------------------------------------------------------------------------
class TProceso : public TPersistent
{
private:
int FID;
protected:

virtual void __fastcall Asignar() = 0;
public:
__fastcall TProceso();
__fastcall ~TProceso();
virtual bool __fastcall Agregar() = 0;
__property int ID = {read=FID, write=FID};
};
#endif


Y ésta es la clase que hereda de la abstracta


#ifndef ProcesoAH
#define ProcesoAH
#include "Proceso.h"
//---------------------------------------------------------------------------
class TProcesoA : public TProceso
{
private:
AnsiString FDatoA;
protected:
void __fastcall Asignar();
public:
__fastcall TProcesoA();
__fastcall ~TProcesoA();
bool __fastcall Agregar();
__published:
__property AnsiString DatoA = {read=FDatoA, write=FDatoA};

};
extern PACKAGE TProcesoA *ProcesoA;
#endif


Lo que intento es que a partir del nombre de la clase craer una instancia y poder utilizar sus métodos. El nombre de la clase a instanciar varia, pero todas heredan de TProceso.

Ej.

Primero registro la clase y posteriormente la busco a través de FindClass e intento accesar a sus métodos de la siguiente manera:


AnsiString Clase = "TProcesoA";

RegisterClass(__classid(TProcesoA));
TPersistentClass Proc;
Proc = FindClass(Clase);

((TProceso*)&Proc)->Agregar();



Sin embargo al utilizar cualquier método accesandolo de la manera en como se muestra arriba, toda referencia sobre elementos visuales (TComboBox, TButton) que tenga en mi form pasan a NULL :eek: .... y ya no puedo tener acceso a ellos

Le he dado muchas vueltas y no lo he conseguido... :(

En general quiero crear la instancia de la clase, es decir, crear el objeto y trabajar con sus métodos... pero esto depende del nombre de la clase a crear.

Si alguien tiene alguna sugerencia....será bienvenida! :rolleyes:

Gracias!!!

jachguate
05-10-2006, 03:06:25
Me perdí de algo o no estas creando una instancia... estas intentando ejecutar Agregar() sobre la clase, no sobre una instancia válida del objeto.

Hasta luego.

;)

buildero_d
05-10-2006, 06:12:56
Que tal Juan.. gracias por contestar...
Efectivamente, ese es el problema que no es una instancia válida. Lo que necesito es intanciar mi clase.

FindClass me regresa un puntero de tipo TMetaClass,

AnsiString Clase = "TProcesoA";

RegisterClass(__classid(TProcesoA));
TMetaClass * Proc;
Proc = FindClass(Clase);

...?????



la pregunta es.... ¿puedo crear una instancia de mi clase a traves de este puntero?

Saludos y gracias.