PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD14] operateur d'indirection pour allouer une classe
[WD14] operateur d'indirection pour allouer une classe
Iniciado por philuser, 23,feb. 2009 18:33 - 4 respuestas
Publicado el 23,febrero 2009 - 18:33
Bonjour,

Y a t il un moyen pour allouer une classes en fonction d'un paramètre. J'ai essayé la méthode suivante :

pclNewObj = allouer un {sCObjNeuf}

sCObjNeuf étant une chaine contenant le vrai non de l'objet a instanciée bien sur.
Mais WinDev me gère une erreur sur l'opérateur d'indirection "{"

Quelqu'un aurait-il une solution

Merci
Publicado el 23,febrero 2009 - 19:24
Bonjour,

Tu peux utiliser un SELON pour gérer chaque cas (et du coup te passer des
indirections), ou utiliser la compilation dynamique (une procédure qui
renvoie le pointeur en question).

La première méthode t'oblige à revoir ton code à chaque nouvelle classe, la
deuxième me parait "lourde" pour une simple instanciation. A voir en
fonction des besoin, mais j'avoue être étonné qu"on ne puisse pas le faire
"simplement", ou alors je rate quelquechose.

Frédéric.

"philuser" <philuser@gmail.com> a écrit dans le message de
news:685066b5fa4473e5ac2e89a13f53dbb8@news.pcsoft...

Bonjour,

Y a t il un moyen pour allouer une classes en fonction d'un paramètre.

J'ai essayé la méthode suivante :

pclNewObj = allouer un {sCObjNeuf}

sCObjNeuf étant une chaine contenant le vrai non de l'objet a instanciée

bien sur.
Mais WinDev me gère une erreur sur l'opérateur d'indirection "{"

Quelqu'un aurait-il une solution

Merci


Publicado el 24,febrero 2009 - 08:15
Bonjour,

Frédéric DEMILLY a écrit dans le message de news <49a2d7e0$1@news.pcsoft.fr> :
Tu peux utiliser un SELON pour gérer chaque cas (et du coup te passer des
indirections), ou utiliser la compilation dynamique (une procédure qui
renvoie le pointeur en question).


La seconde solution est la bonne, elle a été testée des milliers de fois.

FUNCTION GLOBAL GetAdapter(sClass is string)
pclObject is object dynamic

WHEN EXCEPTION IN
sSource is string
sSource = "pclMyObject is "+sClass+" dynamic" + CR
sSource += "pclMyObject = new "+sClass+ CR
sSource += "RESULT pclMyObject"
sResultatCompile is string
sResultatCompile = Compile("Factory_Proc_dynamique", sSource)
IF sResultatCompile = "" THEN
pclObject = ExecuteProcess("Factory_Proc_dynamique", trtProcedure)
ELSE
Application::Log( Application::ERR_SEVERE, "Erreur lors de la création d'un objet "+sClass+". "+sResultatCompile)
END
DO
Application::Log( Application::ERR_SEVERE, ExceptionInfo(errFullDetails))
END
RESULT pclObject


amicalement,
--
Eric Boyron
Publicado el 24,febrero 2009 - 09:52
Ok Merci de votre assistance, j'étais en effet arrivé au même constat soit un une succession d'un embranchement SELON CAS1 .... soit la compilation dynamique. J'avais juste trouvé la première peut élégante (assujetti à une modification du source a chaque évolution de la variable) et la seconde franchement très lourd dingue pour effectuer une simple indirection de code sur une instanciation de classe.
Mais soit... on fera donc lourd et compliqué.

Merci encore pour votre aide
Publicado el 03,noviembre 2018 - 17:20
Bonjour,

En version 23, je suis étonné qu'une
//Créé une référence sur une classe de type cEtatGazeux
pclMonEtatDestinatio est un "cEtatGazeux" dynamique

//Ne fonctionne pas: erreur de compilation: "Le type 'sClasseEtatDestination' est inconnu."
MonEtatDestinationEXPRESS est un sClasseEtatDestination dynamique


Avez vous essayé avec la version 24?

D'avance merci pour vos lumières.