Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Instanciar Clase (https://www.clubdelphi.com/foros/showthread.php?t=36208)

buildero_d 04-10-2006 23:09:01

Instanciar Clase
 
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:
Código:

#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

Código:

#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:

Código:

    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.


La franja horaria es GMT +2. Ahora son las 11:52:34.

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