Conseils sur une stratégie pour passer en mode compilé

Bonjour,

Nous avons une structure assez ancienne qui a suivi les évolutions des versions de 4D (nous sommes en 17.3 Windows Serveur et Clients)

Plus de 200 tables, plus de 4500 méthodes, plein de formulaires etc.

Un effort a été fait sur le code notamment pour la déclaration des variables et et permettre la compilation du code.
Cette structure fonctionne en mode compilé en C/S

Maintenant on se heurte à des problèmes qui sont dus essentiellement à des non déclarations de variables utilisées via des pointeurs et instanciées sans erreur en interprété.

Ce qui va dire que cela nous oblige à tout tester pour détecter les erreurs. Travail plutôt ingrat, long et pas forcément fiable.

Est ce que vous avez des conseils pour cela ? Y a t il d’autres pièges qui ne vont apparaitre qu’à l’exécution ?

Merci de vos retours.

Vincent

Qu’entends-tu par instanciées en interprété ? Des exemples ?

Ce genre d’hérésie…

<code 4D>
AppelDeLaMethodeQuiTue(->$myArray)
</code 4D>

Le code de AppelDeLaMethodeQuiTue

<code 4D>
C_POINTER($1;$arrayPtr)

$arrayPtr:=$1

ARRAY TEXT($arrayPtr->;0)

APPEND TO ARRAY($arrayPtr->;“Un”)
APPEND TO ARRAY($arrayPtr->;“Deux”)

TRACE

</code 4D>

Résultat en interprété
[]32010929;“Your comment here…”[/]

Ou celle ci aussi est pas mal. J’en ai deja corrigé un paquet mais il en reste.
Souvent cela correspond à des tableaux de listbox, le compilateur les trouve mais ne leur donne pas le bon type et boom à l’exécution.
[]32010952;“Your comment here…”[/]

Y a comme un problème :twisted: pour faire cela tu as du désactiver quelque chose sinon tu es obligé de faire comme cela:

<code 4D>
C_POINTEUR($montableau)
$montableau:=OBJET Lire pointeur
//%W-518.5
TABLEAU TEXTE($montableau->;0)
//%W+518.5

</code 4D>

sinon cela ne passe pas la compilation sans un beau warning ! :wink:

Pour ce qui est des tableaux de listbox (NB: on parle ici de tableaux qui permettent la gestion de la listbox, pas de tableau de colonne simple), je confirme tu ne peux pas faire confiance aveugle à 4D qui est buggé est qui type ces tableaux avec un mauvais type en automatique. Il faut les forcer dans une de tes méthodes quelque part.

C’est d’ailleurs ces mêmes tableaux que la recherche dans le développement ne sait pas retrouver… :evil:

Ha oui, c’est du code https://www.youtube.com/watch?v=6LQWo_mhGXQy va lui faire mal>. Mais les meilleurs tortionnaires affectionnent surtout EXECUTER FORMULE et Indefini…

Sur ce coup là, je pense qu’une recherche dans le code des commandes de déclaration dont les parenthèses enferment un “->” devraient t’en détecter pas mal, non ?

Pour répondre à Manuel, non je n’ai rien désactivé.

Si tu le fais dans une méthode seule oui cela ne passe pas.
Mais si tu le fais via un appel de méthode avec paramètre le compilateur ne le voit pas.

Et oui Arnaud tu as raison je dois avoir quelques ‘executer formule’ qui contiennent des déclarations de variables , je crois que c’était pour ajouter dynamiquement des colonnes de listbox (du temps de la v15 ou v16…)
Mais ces cas sont limités et faciles à contourner.

Bon je vais reprendre mon bâton de pèlerin sur mon lent chemin de la rédemption…
Déclarer ce qui doit être déclarer et le faire au bon endroit et virer ces foutues manipulations de pointeurs

Vincent

Je ne sais pas si tu utilises ce genre de chose (c’est de ces tableaux
là par exemple dont je parle):

: Doc 4D

Tableau de contrôle des lignes (list box de type tableau uniquement)
: permet de contrôler les propriétés d’interface “masquée”,
“désactivée” et “sélectionnable” pour chaque ligne de list box de
type tableau. Vous devez saisir le nom d’un tableau de type Entier
long devant contenir le même nombre d’éléments que la list box.
Chaque élément du tableau indique si la ligne correspondante est :
masquée ou visible (visible par défaut)
activée ou désactivée (activée par défaut)
sélectionnable ou non sélectionnable (sélectionnable par défaut)
Vous pouvez définir les propriétés de chaque ligne en affectant des
constantes aux éléments du tableau correspondant. Pour plus
d’informations, reportez-vous à la section Gestion de l’affichage des
lignes.
Note de compatibilité : Dans les versions précédentes de 4D, cette
propriété était nommée “Tableau lignes masquées” et attendait un
tableau booléen. Par compatibilité, un tableau booléen est toujours
accepté comme tableau de contrôle des lignes. Dans ce tableau, chaque
élément indique le statut masqué/affiché de la ligne correspondante
dans la list box. Vrai signifie que la ligne est masquée et Faux,
qu’elle est affichée.

: Vincent HENNIQUE

Si tu le fais dans une méthode seule oui cela ne passe pas.
Mais si tu le fais via un appel de méthode avec paramètre le
compilateur ne le voit pas.

Je n’ai pas compris ta réponse. Il y a TOUJOURS un warning au moment de la compilation si tu utilises un pointeur dans ces situations.
[]32012435;“Warning à la compile…”[/]

Si tu en as pas au moment de la compilation de ton code, c’est que tu as oublié de fermer (ou mal utilisé) les codes qui permettent de les masquer.

C’est effectivement à toi de t’assurer que les appels que tu fais de ces méthodes correspondent bien à un pointeur valide.

Ah oui je n’avais pas compris le sens de ta remarque.

J’ai 1400 warnings…

Faut que je commence par cela tu as raison.

Sauf erreur, celle-là veut dire qu’on a utilisé TABLEAU MACHIN pour dimensionner. Vaut mieux utiliser INSERER LIGNES, SUPPRIMER LIGNES, etc.

désolé Arnaud, mais j’ai pas compris ta réponse :oops:

L’exemple de la doc que je donne concerne le genre de tableau que 4D ne sait pas typer correctement seul et qui ne sont pas trouvables via la recherche dans le développement.

Colonne de listbox ?

Tableaux utilisés dans les différentes propriétés des listbox !!! :twisted: