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

Initialiser une structure

3 réponses
Avatar
Romain PETIT
Bonjour,

ca fait un petit moment que ca me travaille.
J'ai bien sûr trouvé un moyen mais je voudrais savoir si quelqu'un a
trouvé mieux (ou si la solution existe en WD9)

Je voudrais pouvoir réinialiser des variables structures avec une
méthode générique.


Voici ma méthode (en POO, mais c'est pareil en procédural)
Je suis obligé de passer un paramètre (une constante) pour identifier la
structure à réinitialiser, ce n'est donc pas très générique...


***********

:CX_strDemandeEntete:sIdentifiant = "toto"
SI :CX_mfReinitStructure(:CX_strDemandeEntete, ::CX_CT_STRTYPE_DEMANDE_ENTETE) ALORS
...// ok, j'ai bien tout remis à blanc
FIN

***********
FONCTION CX_mfReinitStructure(strStructure, eType)
:CX_sProc = "CX_mfReinitStructure(<structure>,"+eType+")"

bRes est un booléen = Vrai
sVarStruct est une chaîne
SELON eType
CAS ::CX_CT_STRTYPE_RESULTAT_ENTETE
sVarStruct = "structTempRE"
structTempRE est une CXstructResultatEnTete
CAS ::CX_CT_STRTYPE_RESULTAT_CORPS
sVarStruct = "structTempRC"
structTempRC est une CXstructResultatCorps
CAS ::CX_CT_STRTYPE_DEMANDE_ENTETE
sVarStruct = "structTempDE"
structTempDE est une CXstructDemandeEnTete
CAS ::CX_CT_STRTYPE_DEMANDE_CORPS
sVarStruct = "structTempDC"
structTempDC est une CXstructDemandeCorps
AUTRES CAS
:CX_mpErr("Erreur, type de structure inconnu ou non géré " + eType)
bRes = Faux
FIN

SI bRes ALORS
QUAND EXCEPTION DANS
Transfert(&strStructure, &{sVarStruct, indVariable}, Dimension(strStructure))
FAIRE
:CX_mpErr("Erreur dans l'initialisation de la structure lors du transfert mémoire..., type de structure : " + eType)
bRes = Faux
FIN
FIN
RENVOYER bRes


--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)

3 réponses

Avatar
Maax°\(51\)°
Salut,

Une autre méthode (que j'utilise, de tête) :

PROCEDURE RAZStruct(pStruct)

// recup du pointer de la structure
pnpStruct est un entier = &pStruct

// recup la taille de la structure
pnStructSize est un entier = Dimension(pStruct)

// genere un buffer de la taille de la structure (et qui ne contient que des
<NULL>)
psBuffer est une chaine = Repete(pnStructSize, Caract(0))

// RAZ la structure
Transfert(pnpStruct, &psBuffer, pnStructSize)

@
Maax°(51)°

"Romain PETIT" a écrit dans le message de news:

Bonjour,

ca fait un petit moment que ca me travaille.
J'ai bien sûr trouvé un moyen mais je voudrais savoir si quelqu'un a
trouvé mieux (ou si la solution existe en WD9)

Je voudrais pouvoir réinialiser des variables structures avec une
méthode générique.


Voici ma méthode (en POO, mais c'est pareil en procédural)
Je suis obligé de passer un paramètre (une constante) pour identifier la
structure à réinitialiser, ce n'est donc pas très générique...


***********

:CX_strDemandeEntete:sIdentifiant = "toto"
SI :CX_mfReinitStructure(:CX_strDemandeEntete,
::CX_CT_STRTYPE_DEMANDE_ENTETE) ALORS
...// ok, j'ai bien tout remis à blanc
FIN

***********
FONCTION CX_mfReinitStructure(strStructure, eType)
:CX_sProc = "CX_mfReinitStructure(<structure>,"+eType+")"

bRes est un booléen = Vrai
sVarStruct est une chaîne
SELON eType
CAS ::CX_CT_STRTYPE_RESULTAT_ENTETE
sVarStruct = "structTempRE"
structTempRE est une CXstructResultatEnTete
CAS ::CX_CT_STRTYPE_RESULTAT_CORPS
sVarStruct = "structTempRC"
structTempRC est une CXstructResultatCorps
CAS ::CX_CT_STRTYPE_DEMANDE_ENTETE
sVarStruct = "structTempDE"
structTempDE est une CXstructDemandeEnTete
CAS ::CX_CT_STRTYPE_DEMANDE_CORPS
sVarStruct = "structTempDC"
structTempDC est une CXstructDemandeCorps
AUTRES CAS
:CX_mpErr("Erreur, type de structure inconnu ou non géré " + eType)
bRes = Faux
FIN

SI bRes ALORS
QUAND EXCEPTION DANS
Transfert(&strStructure, &{sVarStruct, indVariable},
Dimension(strStructure))
FAIRE
:CX_mpErr("Erreur dans l'initialisation de la structure lors du transfert
mémoire..., type de structure : " + eType)
bRes = Faux
FIN
FIN
RENVOYER bRes


--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)




Avatar
Romain PETIT
Maax°(51)° a formulé la demande :
Salut,



Salut,

Une autre méthode (que j'utilise, de tête) :



Super !
Juste une correction minime :
psBuffer est une chaine = Repete(Caract(0), pnStructSize)

Merci pour cette procédure générique.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Maax°\(51\)°
Salut,


De rien
C'est ma spécialité...

@+
Maax°(51)°

"Romain PETIT" a écrit dans le message de news:

Maax°(51)° a formulé la demande :
Salut,



Salut,

Une autre méthode (que j'utilise, de tête) :



Super !
Juste une correction minime :
psBuffer est une chaine = Repete(Caract(0), pnStructSize)

Merci pour cette procédure générique.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)