Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD10 - aux spécialistes POO

5 réponses
Avatar
I.G.LOG
Pour les spécialistes de le POO !!!

Bonjour à tous
J'ai un erreur d'exécution lors d'une indirection sur un membre de classe.
Dans le code qui suit j'ai l'erreur dans la méthode mDuplique() ?!

Le code ci-après devrait permettre de dupliquer des objets _Type.
Je crois qu'il fonctionnait sous WD9 (j'ai migré en 10 récemment)
Connaissez vous un moyen de récupérer la valeur des membres d'une instance
de classe ?
Merci à tous



lType est un _Type dynamique
lType1 est un _Type dynamique

lType = allouer un _Type
lType1 = allouer un _Type
lType1:IDTYPE = 12
lType:mDuplique(lType1) <-- ca plante

liberer lType
liberer lType1



_Type est une classe
hérite de __enreg
IDTYPE est un entier
DESIGNATION est une chaîne
TYPE est une chaîne
SOUSTYPE est une chaîne
FIN


PROCEDURE _Type::Constructeur()


// Variables fichier
:_NOMFIC = "TYPE"
:_NOMID = "IDTYPE"
:mNommeChamps("IDTYPE")
:mNommeChamps("DESIGNATION")
:mNommeChamps("TYPE")
:mNommeChamps("SOUSTYPE")
// Nota: la méthode mNommChamps() crée un tableau contenant les noms des
membres (pas moyen de le créer auto à partir de la déclaration des membres
?!)


__Enreg est une classe
IDENT est un entier
_NOMFIC est une chaîne
_NOMID est une chaîne
MODE est une chaîne
FLAG est un entier sur 1 octet
_Champs est un tableau dynamique
_Init est un objet dynamique
FIN

PROCEDURE VIRTUELLE __enreg:mDuplique(pObj)

lCh1 est une chaîne
lCh2 est une chaîne
x est un entier
y est un entier


y = Dimension(:_Champs)
POUR x = 1 A y
lCh1 = ":" + :_Champs[x]
lCh2 = "pObj:" + :_Champs[x]
:mSetValeur(lCh1,{lCh2}) <----- Ca plante sur lCh2: "l'élément
pObj:IDTYPE est inconnu"
FIN

RENVOYER Vrai


PROCEDURE __enreg:mSetValeur(pMembre,pValeur="")

{pMembre} = pValeur

5 réponses

Avatar
Gilles TOURREAU
I.G.LOG vient de nous annoncer :
Pour les spécialistes de le POO !!!

Bonjour à tous
J'ai un erreur d'exécution lors d'une indirection sur un membre de classe.
Dans le code qui suit j'ai l'erreur dans la méthode mDuplique() ?!

Le code ci-après devrait permettre de dupliquer des objets _Type.
Je crois qu'il fonctionnait sous WD9 (j'ai migré en 10 récemment)
Connaissez vous un moyen de récupérer la valeur des membres d'une instance
de classe ?
Merci à tous



lType est un _Type dynamique
lType1 est un _Type dynamique

lType = allouer un _Type
lType1 = allouer un _Type
lType1:IDTYPE = 12
lType:mDuplique(lType1) <-- ca plante

liberer lType
liberer lType1



_Type est une classe
hérite de __enreg
IDTYPE est un entier
DESIGNATION est une chaîne
TYPE est une chaîne
SOUSTYPE est une chaîne
FIN


PROCEDURE _Type::Constructeur()


// Variables fichier
_NOMFIC = "TYPE"
_NOMID = "IDTYPE"
mNommeChamps("IDTYPE")
mNommeChamps("DESIGNATION")
mNommeChamps("TYPE")
mNommeChamps("SOUSTYPE")


// Nota: la méthode mNommChamps() crée un tableau contenant les noms des
membres (pas moyen de le créer auto à partir de la déclaration des membres
?!)


__Enreg est une classe
IDENT est un entier
_NOMFIC est une chaîne
_NOMID est une chaîne
MODE est une chaîne
FLAG est un entier sur 1 octet
_Champs est un tableau dynamique
_Init est un objet dynamique
FIN

PROCEDURE VIRTUELLE __enreg:mDuplique(pObj)

lCh1 est une chaîne
lCh2 est une chaîne
x est un entier
y est un entier


y = Dimension(:_Champs)
POUR x = 1 A y
lCh1 = ":" + :_Champs[x]
lCh2 = "pObj:" + :_Champs[x]
:mSetValeur(lCh1,{lCh2}) <----- Ca plante sur lCh2: "l'élément
pObj:IDTYPE est inconnu"
FIN

RENVOYER Vrai


PROCEDURE __enreg:mSetValeur(pMembre,pValeur="")

{pMembre} = pValeur



Sous Windev 9, selon le D.S.B. (Documentation Semi-Baclé... technologie
exclusive de PC-SOFT) il n'est pas possible d'utiliser l'indirection
avec le nom de l'objet + un membre.

Tu peux seulement faire :

{":membre", indVariable} = ... (Utilisable dans une classe)
Ou alors
{"obj", indVariable}:membre = ...

Extrait de la documentation :

**************************
Indirection sur un membre de classe

{ <Expression> }

Détail du paramètre

<Expression> : Chaîne de caractères

Expression permettant d'identifier le membre de la classe.
Si le membre est :

global, utilisez la syntaxe suivante : {" :: NomDuMembre"}

n'est pas global, utilisez la syntaxe suivante : {" : NomDuMembre"}
------------------------------------
Indirection sur une structure

Une indirection ne peut pas contenir un accès à une structure ou à une
instance de classe. Cependant, il est possible d'utiliser la syntaxe
suivante :

{<Variable structure>} : membre
**************************

Et a ma connaissance en Windev 9, il n'y a aucun moyen d'explorer les
membres d'une classe...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
I.G.LOG
Bonjour,

Tu peux seulement faire :

{":membre", indVariable} = ... (Utilisable dans une classe)
Ou alors
{"obj", indVariable}:membre = ...



oui, j'avais lu la doc, d'où ma question


Et a ma connaissance en Windev 9, il n'y a aucun moyen d'explorer les
membres d'une classe...



Je vais reprendre le programme WD9, il me semblait que ça marchait !
Je vous tient au courrant.

Donc il semblerai qu'il n'y a pas de solution sous WD 10 ??!!!

Cordialement
Phil
Avatar
Gilles TOURREAU
I.G.LOG avait prétendu :
Bonjour,

Tu peux seulement faire :

{":membre", indVariable} = ... (Utilisable dans une classe)
Ou alors
{"obj", indVariable}:membre = ...



oui, j'avais lu la doc, d'où ma question


Et a ma connaissance en Windev 9, il n'y a aucun moyen d'explorer les
membres d'une classe...



Je vais reprendre le programme WD9, il me semblait que ça marchait !
Je vous tient au courrant.

Donc il semblerai qu'il n'y a pas de solution sous WD 10 ??!!!

Cordialement
Phil



Sous Windev 9 ca ne fonctionne pas chez moi...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
I.G.LOG
>
Sous Windev 9 ca ne fonctionne pas chez moi...

Cordialement



Il faut que je creuse la question (je dois "remonter" le projet WD9), je
vous tiens au courrant.
J'essaie par ailleurs la piste de serialise() et deserialise() qui devrait -
peut-être - permettre la copie d'objet ?!
Connaissez vous un moyen de lister les membres d'un objet ? Dans le code,
j'ai la fonction :mNommeChamps() qui incrémente un tableau avec les noms des
membres. Si il y avait mieux ?!
Encore merci
Cordialement
Phil
Avatar
Gilles TOURREAU
I.G.LOG a pensé très fort :

Sous Windev 9 ca ne fonctionne pas chez moi...

Cordialement



Il faut que je creuse la question (je dois "remonter" le projet WD9), je
vous tiens au courrant.
J'essaie par ailleurs la piste de serialise() et deserialise() qui devrait -
peut-être - permettre la copie d'objet ?!
Connaissez vous un moyen de lister les membres d'un objet ? Dans le code,
j'ai la fonction :mNommeChamps() qui incrémente un tableau avec les noms des
membres. Si il y avait mieux ?!
Encore merci
Cordialement
Phil



Il n'existe rien en Windev permettant de parcourir le contenu d'une
classe...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr