La figure 1 présente le source du module MultiDim. Une fois lié à une application, ce programme permet à cette dernière de manipuler facilement des tableaux multidimensionnels simulés (la figure 2 présente le membre Copy des prototypes utilisés dans ce module). J'expliquerai plus loin comment utiliser MultiDim dans les applications.
Le programme MultiDim
Dans un premier temps, étudions le programme de service en lui-même.
Même si MultiDim est un module NoMain, il définit certaines variables dans la partie principale du source (en A) avant la première procédure, afin d’étendre la visibilité de ces variables à l’ensemble des procédures du module. Les champs GoodReturn et BadReturn représentent des constantes retournées par les procédures MultiDim pour en indiquer respectivement la réussite ou l’échec. Le champ TotNumElts est une constante nommée possédant une valeur de 10.
DscrptrPtrArr, dont la définition suit, représente un tableau de pointeurs vers des descripteurs de tableaux (structures décrivant les attributs de chaque tableau multidimensionnel). Ces structures sont détaillées un peu plus loin. DscrptrPtrArr étant défini comme possédant TotNumElts (10) éléments, on ne peut pas manipuler plus de 10 tableaux multidimensionnels en parallèle. Si un plus grand nombre de tableaux est nécessaire, il suffit de modifier la valeur de la constante nommée TotNumElts.
Pour finir, le champ CurrNumElts contient le nombre réel de tableaux simulés. MultiDim utilise ce champ pour assigner des identificateurs temporaires uniques, ou “ handles ” (poignées), pour les tableaux.
MultiDim nécessite un handle pour chaque tableau multidimensionnel. La procédure GetArrayHdl (dont l’instruction de départ se trouve en B) récupère un handle vers un tableau et doit être appelée pour chaque tableau avant la manipulation de celui-ci. Les définitions des paramètres GetArrayHdl sont illustrées en C. UsrDscrptrPtr représente un pointeur vers le descripteur du tableau du programme appelant et Hdl est le handle du tableau.
Chaque invocation de GetArrayHdl incrémente la valeur du champ CurrNumElts et assigne le résultat au handle du tableau, fournissant ainsi l’identificateur unique indispensable pour référencer le tableau. Outre la vérification d’un handle disponible, GetArrayHdl retourne le handle du tableau au programme appelant à travers le paramètre Hdl et affecte la valeur du pointeur vers l’adresse du descripteur du tableau du programme appelant (D) au tableau DscrptrPtrArr.
La procédure GetArrayIdx (dont l’instruction de départ se trouve en E) constitue la véritable cheville ouvrière de MultiDim : elle calcule l’index unidimensionnel à utiliser pour un jeu donné d’index multidimensionnels. Comme on peut le deviner, cette procédure est considérablement plus complexe que GetArrayHdl.
GetArrayIdx utilise les paramètres définis en F. Elle calcule l’index du tableau unidimensionnel et retourne le résultat dans le paramètre Idx. En plus du handle du tableau (Hdl), la procédure accepte en entrée jusqu’à 10 valeurs d’index multidimensionnels. Cette limite de 10 dimensions en ce qui concerne les tableaux est raisonnable pour la plupart des applications professionnelles.
La procédure utilise le handle comme index sur DscrptrPtrArr, le tableau de descripteurs de tableau. On se souviendra que les éléments de DscrptrPtrArr représentent des pointeurs vers des descripteurs de tableaux. En G, notez que je définis UsrDscrptrArr comme étant un tableau vers lequel pointe le pointeur UdaPtr. Ce tableau correspond au tableau de descripteurs de l’application. Comme toutes les variables pointées, il n’occupe pas d’emplacement précis en mémoire. En fait, il s’agit d’une définition qui peut être placée n’importe où en mémoire en positionnant son pointeur (UdaPtr). Le champ des handles (Hdl) indique la valeur à utiliser pour UdaPtr parmi les 10 valeurs possibles du pointeur. Ainsi, DscrptrPtrArr(Hdl) contient la valeur à utiliser pour UdaPtr. L’instruction Eval en I affecte cette valeur à UdaPtr.
La procédure GetArrayIdx valide en premier lieu les paramètres qui lui sont passés en exécutant la sous-routine ValParms (K). Notez que cette sous-routine exécute la sous-routine FilIndxArr (L) pour compléter le tableau d’index nommé IndxArr (défini en H). FilIndxArr utilise le résultat de la fonction intégrée %Parms pour rechercher le nombre de paramètres et place ensuite les valeurs concernant la taille passées comme paramètres dans le tableau IndxArr.
La procédure GetArrayIdx effectue les principaux calculs afin de déterminer l’index linéaire (véritable) en J. Une discussion sur l’équation polynomiale mise en oeuvre ici dépasse le cadre de cet article ; je puis cependant garantir que l’équation fonctionne ! (pour de plus amples informations sur la formule qui sert de base à cette équation, consultez l’article “ Multidimesionnal Arrays : the Basics ”).
Je suis conscient de la complexité du code du programme de service MultiDim. Aussi, voyons à présent un code plus facile à comprendre : celui de l’application utilisant MultiDim.
Téléchargez cette ressource
Mac en entreprise : le levier d’un poste de travail moderne
Ce livre blanc répond aux 9 questions clés des entreprises sur l’intégration du Mac : sécurité, compatibilité, gestion, productivité, coûts, attractivité talents, RSE et IA, et l’accompagnement sur mesure proposé par inmac wstore.
Les articles les plus consultés
- Cybersécurité Active Directory et les attaques de nouvelle génération
- Les 6 étapes vers un diagnostic réussi
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Chiffrements symétrique vs asymétrique
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
Les plus consultés sur iTPro.fr
- Des Master Data aux data products : comment l’IA redéfinit le rôle du MDM
- Communication d’entreprise : la voix s’impose à nouveau comme canal critique à l’ère de l’IA
- Réforme de la facturation électronique : une préparation largement théorique
- Le futur de la cryptographie post-quantique
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
