Les espaces de nom VLX
mardi 17 mars 2026Supposons que vous avez un premier programme AutoLISP program1 qui affiche un message : "Bonjour".
(defun say-hello ()
(alert "Hello, World!")
)
(defun program1 ()
(say-hello)
)
La fonction principale program1 appelle la fonction say-hello, qui affiche un message d'alerte.

OK, rien de bien intéressant ici. Maintenant, vous avez un deuxième programme AutoLISP program2 :
(defun say-hello ()
(alert "Hello, World!")
)
(defun program2 ()
(say-hello)
)
C'est exactement le même programme ici dans le cadre de cet article, mais il faut imaginer que program1 et program2 sont deux programmes qui font différentes choses. L'important ici, c'est qu'ils partagent la même fonction say-hello.
Tant que les deux fonctions say-hello sont identiques, il n'y a pas de problème. Mais au cours du développement, vous allez peut-être avoir besoin de modifier la fonction say-hello dans l'un des programmes. Dans program2, par exemple, vous allez modifier say-hello pour afficher "Hello, Universe!" plutôt que "Hello, World!".
(defun say-hello ()
(alert "Hello, Universe!")
)
(defun program2 ()
(say-hello)
)
Et là, c'est le drame, c'est la dernière fonction chargée qui va écraser l'autre. Si vous chargez d'abord program1, puis program2, vous obtiendrez "Hello, Universe!" dans program2 ET program1. Le deuxième programme va affecter le premier et ça, c'est un problème. C'est une source de bug qui va vous faire arracher les cheveux.
La solution à ce problème, c'est de packager vos programmes dans un VLX en prenant soin d'activer l'option Espace nom différent lors de la création du VLX.
Créer un VLX avec un espace de nom séparé
Pour créer un VLX, lancez la commande FABLISPAPP dans AutoCAD. L'assistant de création d'application vous guide à travers plusieurs étapes. L'option qui nous intéresse ici se trouve dans la page Options d'application : Espace nom différent.

En cochant cette option, chaque VLX aura son propre espace de nom isolé. Les fonctions définies à l'intérieur d'un VLX ne seront plus visibles depuis l'autre VLX, ni depuis la ligne de commande. Plus de collision entre les deux fonctions say-hello.
Le piège : fonctions inaccessibles
On empaquète nos deux programmes, on charge les deux VLX, et... surprise :
(program2)
; erreur: no function definition: PROGRAM2
La fonction program2 est introuvable. Et si on teste program1, même résultat. C'est logique quand on y pense : l'espace de nom séparé isole toutes les fonctions du VLX, y compris celles qu'on voudrait pouvoir appeler depuis la ligne de commande.
La solution : vl-doc-export
Pour rendre une fonction accessible depuis l'espace de nom du document (la ligne de commande), il faut l'exporter explicitement avec vl-doc-export. Voici nos deux programmes corrigés :
(defun say-hello ()
(alert "Hello, World!")
)
(defun program1 ()
(say-hello)
)
(vl-doc-export 'program1)
(defun say-hello ()
(alert "Hello, Universe!")
)
(defun program2 ()
(say-hello)
)
(vl-doc-export 'program2)
L'appel (vl-doc-export 'program1) exporte le symbole program1 depuis l'espace de nom du VLX vers l'espace de nom du document. Après reconstruction des VLX, on peut maintenant appeler (program1) et (program2) depuis la ligne de commande, et chacun affichera bien son propre message.
La fonction say-hello, elle, reste volontairement non exportée. Chaque VLX conserve sa propre version, isolée dans son espace de nom. C'est exactement ce qu'on voulait.
vl-doc-import : l'inverse
Il existe aussi la fonction vl-doc-import qui fait l'inverse : elle importe un symbole depuis l'espace de nom du document vers l'espace de nom du VLX. C'est utile si votre VLX a besoin d'appeler une fonction définie dans un autre VLX ou directement dans le document.
(vl-doc-import 'une-fonction-du-document)
En résumé
- Sans espace de nom séparé, tous les programmes partagent le même espace et les fonctions portant le même nom s'écrasent mutuellement.
- Avec l'option Espace de nom différent, chaque VLX est isolé, mais ses fonctions ne sont plus accessibles depuis la ligne de commande.
vl-doc-exportpermet d'exposer les fonctions que vous voulez rendre publiques.vl-doc-importpermet d'accéder depuis votre VLX à des fonctions définies dans le document.
Besoin d'un développement AutoCAD (AutoLISP, ObjectARX, .NET, VBA) ? Contactez-moi pour un devis gratuit.