mod_dll.c
, et n'est pas compilé par défaut dans la version Windows. Il autorise le chargement dynamique de code exécutable et de modules dans le serveur au moment du démarrage, s'ils sont contenus dans le répertoire Win32 DLLs.
Le module DLL peut charger d'autres modules dans le serveur lorsqu'il se configure (uniquement à sa mise en route, la relecture des fichiers de configuration ne peut affecter l'état des modules chargés), lorsque ces modules sont compilés sous forme de DLL.
Ce module est disponible à partir de la version 1.3 d'Apache, et n'est disponible que dans la distribution pour Microsoft Windows.
L'API d'Apache est restée inchangée entre les versions Unix et celles pour Windows. De nombreux modules tourneront sous Windows avec éventuellement quelques modifications mineures par rapport à leur version Unix. Toutefois, certains autres s'appuient sur des aspects plus spécifiques de l'architecture Unix, lesquels ne sont pas connus sous Windows. Ces modules là ne fonctionneront pas.
Lorsqu'un module tourne, il peut être intégré dans le serveur par l'une des deux méthodes suivantes. Comme sous Unix, il peut être compilé dans le serveur. Comme Apache en version Windows ne dispose pas du programme Configure
de son homologue Unix, les fichiers de code source des modules doivent être ajoutés dans le fichier projet ApacheCore, et leurs tables symboliques doivent être ajoutées au fichier nt\modules.c
.
La deuxième méthode est de compiler le module sous forme de DLL, une librairie dynamique qui peut être chargée dans le serveur pendant l'exécution, grâce à la directive LoadModule
. Ces DLL peuvent être distribués et tourneront sur toutes les installations d'Apache sous Windows, sans recompiler le serveur.
Pour créer une DLL à partir d'un module, il est nécessaire d'apporter quelques modifications au code source de ce dernier : L'enregistrement du module doit être exporté vers les DLL (qui seront crées après ; voir ci-après). Pour ce faire, ajoutez la définition MODULE_VAR_EXPORT
(dans les fichiers d'en-tête Apache) à la définition d'enregistrement de module inscrite dans le module. Par exemple, si votre source du module contient :
module foo_module;
Renplacez la ligne ci-dessus par :
module MODULE_VAR_EXPORT foo_module;
Notez que l'exportation n'est traitée que sous Windows, et que le module pourra continuer à être utilisé, tel que, sous Unix. Enfin, si les fichiers .DEF
vous sont familiers, vous pourrez exporter le module par cette méthode.
Maintenant, créez la DLL contenant votre module. Vous devrez la lier à la librairie d'export ApacheCore.lib, créée lorsque la librairie partagée ApacheCore.dll est compilée. Vous devrez peut être changer les paramètres de votre compilateur afin de vous assurez queles fichiers d'en-tête Apache sont placés au bon endroit.
Ceci créera une version DLL de votre module. Placez-le alors dans votre racine serveur, et utilisez la directive LoadModule
pour le charger.
La directive LoadFile effectue l'édition de liens dynamique des fichiers objet ou des librairies nommées lorsque le serveur est démarré ; ceci permet d'ajouter du code additionnel qui peut être nécessaire pour le fonctionnement d'un module. NomFichier est donné relativement à la racine ServerRoot.
La directive LoadModule effectue l'édition de lien dynamique du fichier objet ou de la librairie NomFichier et ajoute la structure de module nommée module à la liste des modules actifs. Module est le nom de la variable externe de type module
dans le fichier. Exemple :
LoadModule status_module modules/ApacheModuleStatus.dll
charge le module ApacheModuleStatus.dll située dans le sous-répertoire 'modules' de la racine serveur.