DosLoadModule |
DOS : Charge un module |
---|---|
DOSCALLS.DLL | os2.h |
Syntaxe
APIRET DosLoadModule( PSZ pszObjectNameBuffer, ULONG ulObjectNameBufferLength , PSZ pszModuleName, PHMODULE phMod ); |
Paramètres
Nom | Description |
---|---|
pszObjectNameBuffer | Ce paramètre permet d'indiquer l'adresse du tampon dans lequel un échec de nom d'objet est placé. |
ulObjectNameBufferLength | Ce paramètre permet d'indiquer la taille de la variable pszObjectNameBuffer. |
pszModuleName | Ce paramètre permet d'indiquer le nom d'une DLL à chargé. |
phMod | Ce paramètre permet d'indiquer le pointeur Handle d'un module. |
Retour
Valeur | Constante | Description |
---|---|---|
0 | NO_ERROR | Cette valeur permet d'indiquer que l'opération s'est correctement effectué |
2 | ERROR_FILE_NOT_FOUND | Cette valeur permet d'indiquer qu'une erreur de fichier introuvable s'est produite. |
3 | ERROR_PATH_NOT_FOUND | Cette valeur permet d'indiquer qu'une erreur de chemin introuvable s'est produite. |
4 | ERROR_TOO_MANY_OPEN_FILES | Cette valeur permet d'indiquer qu'une erreur de trop de fichier ouvert simultanément s'est produite. |
5 | ERROR_ACCESS_DENIED | Cette valeur permet d'indiquer qu'une erreur d'accès refusé s'est produite. |
8 | ERROR_NOT_ENOUGH_MEMORY | Cette valeur permet d'indiquer que la limite de mémoire système est atteinte. |
11 | ERROR_BAD_FORMAT | Cette valeur permet d'indiquer qu'une erreur de mauvais format s'est produite. |
26 | ERROR_NOT_DOS_DISK | Cette valeur permet d'indiquer qu'une erreur de disque non-DOS s'est produite. |
32 | ERROR_SHARING_VIOLATION | Cette valeur permet d'indiquer qu'une erreur de violation de partage s'est produite. |
33 | ERROR_LOCK_VIOLATION | Cette valeur permet d'indiquer qu'une erreur de violation de verroue s'est produite. |
36 | ERROR_SHARING_BUFFER_EXCEEDED | Cette valeur permet d'indiquer qu'une erreur de dépassement de limite de tampon partagé s'est produite. |
95 | ERROR_INTERRUPT | Cette valeur permet d'indiquer qu'une erreur d'interruption s'est produite. |
108 | ERROR_DRIVE_LOCKED | Cette valeur permet d'indiquer qu'une erreur d'unité verrouillé s'est produite. |
127 | ERROR_PROC_NOT_FOUND | Cette valeur permet d'indiquer qu'une procédure est introuvable. |
180 | ERROR_INVALID_SEGMENT_NUMBER | Cette valeur permet d'indiquer qu'une erreur de nombre de segment invalide s'est produit. |
182 | ERROR_INVALID_ORDINAL | Cette valeur permet d'indiquer un ordinal invalide. |
190 | ERROR_INVALID_MODULETYPE | Cette valeur permet d'indiquer un type de module invalide. |
191 | ERROR_INVALID_EXE_SIGNATURE | Cette valeur permet d'indiquer une signature d'exécutable invalide. |
192 | ERROR_EXE_MARKED_INVALID | Cette valeur permet d'indiquer une erreur de marque d'exécutable invalide s'est produite. |
194 | ERROR_ITERATED_DATA_EXCEEDS_64K | Cette valeur permet d'indiquer une erreur de données excédant la limite de 64 Ko se produit. |
195 | ERROR_INVALID_MINALLOCSIZE | Cette valeur permet d'indiquer une erreur de taille d'allocation minimum invalide. |
196 | ERROR_DYNLINK_FROM_INVALID_RING | Cette valeur permet d'indiquer une erreur de lien dynamique invalide dans l'anneau. |
198 | ERROR_INVALID_SEGDPL | Cette valeur permet d'indiquer une erreur de segment DPL invalide. |
199 | ERROR_AUTODATASEG_EXCEEDS_64K | Cette valeur permet d'indiquer une erreur de segment de données dépassant la limite 64 Ko. |
201 | ERROR_RELOCSRC_CHAIN_EXCEEDS_SEGLIMIT | Cette valeur permet d'indiquer une erreur de relocalisation d'une source excédant la limite de segment. |
206 | ERROR_FILENAME_EXCED_RANGE | Cette valeur permet d'indiquer une erreur de nom de fichier excédant la limite du rang. |
295 | ERROR_INIT_ROUTINE_FAILED | Cette valeur permet d'indiquer une erreur d'initialisation de routine a échoué. |
Description
Cette fonction permet d'essayer de charger un module de lien dynamique et retourne l'identificateur de module.
Remarques
- Le paramètre pszModuleName ne doit pas contenir l'extension .DLL si la DLL doit être chargée à partir de la variable d'environnement LIBPATH. D'un autre côté, si la DLL doit être chargée à partir d'un répertoire spécifique (c'est-à-dire pas à partir de LIBPATH), l'extension .DLL est nécessaire.
- La fonction DosLoadModule charge un module de lien dynamique et renvoie un descripteur pour le module.
- Si le fichier est un module de liaison dynamique OS/2, le module est chargé et un descripteur est renvoyé. Le descripteur renvoyé est utilisé pour libérer le module de lien dynamique, obtenir des adresses de procédure et obtenir le nom de fichier complet.
- La fonction DosLoadModule ne peut pas être émis à partir de l'anneau 2 si la routine de bibliothèque dynamique a une routine d'initialisation, ou le processus sera terminé.
- Si le module a une routine d'initialisation se trouvant dans un objet sur lequel IOPL est indiqué, tout processus tentant d'utiliser le module provoquera une erreur de protection générale et sera interrompu.
- Pour les DLL se liant à d'autres DLL, il est possible qu'une ERROR_FILE_NOT_FOUND ou ERROR_PATH_NOT_FOUND indique que l'une des DLL à laquelle la DLL demandée est liée est introuvable.
- Si la DLL à charger a déjà été chargée par un autre processus, la DLL ne sera pas chargée en mémoire deux fois, mais l'accès au processus appelant sera fourni.
- Une erreur ERROR_INVALID_MODULETYPE sera renvoyée si le système d'exploitation pense que vous essayez de charger autre chose qu'une DLL (comme un exécutable par exemple).
- Si le module a une routine d'initialisation se trouvant dans un segment de code ayant le privilège d'entrée/sortie, le processus d'émission de la fonction DosLoadModule provoquera une erreur de protection générale et se terminera.
Exemple
Voici un simple exemple montrant comme appeler cette API avec WatCom C++ for OS/2 :
- #define INCL_DOSERRORS
- #define INCL_DOSMODULEMGR
- #include "os2.h"
- #include "stdio.h"
-
- void main(void) {
- HMODULE hmod;
- UCHAR szErrorName[CCHMAXPATH];
- switch(DosLoadModule(szErrorName, CCHMAXPATH-1, ".\\mondll.dll", &hmod)) {
- case NO_ERROR: printf("Tout va bien !");break;
- case ERROR_FILE_NOT_FOUND: printf("Erreur : Une erreur de fichier introuvable s'est produite.");break;
- case ERROR_PATH_NOT_FOUND: printf("Erreur : Une erreur de chemin introuvable s'est produite.");break;
- case ERROR_TOO_MANY_OPEN_FILES: printf("Erreur : Une erreur de trop de fichier ouvert simultanément s'est produite.");break;
- case ERROR_ACCESS_DENIED: printf("Erreur : Une erreur d'accès refusé s'est produite.");break;
- case ERROR_NOT_ENOUGH_MEMORY: printf("Erreur : La limite de mémoire système est atteinte.");break;
- case ERROR_BAD_FORMAT: printf("Erreur : Une erreur de mauvais format s'est produite.");break;
- case ERROR_NOT_DOS_DISK: printf("Erreur : Une erreur de disque non-DOS s'est produite.");break;
- case ERROR_SHARING_VIOLATION: printf("Erreur : Une erreur de violation de partage s'est produite.");break;
- case ERROR_LOCK_VIOLATION: printf("Erreur : Une erreur de violation de verroue s'est produite.");break;
- case ERROR_SHARING_BUFFER_EXCEEDED: printf("Erreur : Une erreur de dépassement de limite de tampon partagé s'est produite.");break;
- case ERROR_INTERRUPT: printf("Erreur : Une erreur d'interruption s'est produite.");break;
- case ERROR_DRIVE_LOCKED: printf("Erreur : Une erreur d'unité verrouillé s'est produite.");break;
- case ERROR_PROC_NOT_FOUND: printf("Erreur : Une procédure est introuvable.");break;
- case ERROR_INVALID_SEGMENT_NUMBER: printf("Erreur : Une erreur de nombre de segment invalide s'est produit.");break;
- case ERROR_INVALID_ORDINAL: printf("Erreur : Un ordinal invalide.");break;
- case ERROR_INVALID_MODULETYPE: printf("Erreur : Un type de module invalide.");break;
- case ERROR_INVALID_EXE_SIGNATURE: printf("Erreur : Une signature d'exécutable invalide.");break;
- case ERROR_EXE_MARKED_INVALID: printf("Erreur : Une erreur de marque d'exécutable invalide s'est produite.");break;
- case ERROR_ITERATED_DATA_EXCEEDS_64K: printf("Erreur : Une erreur de données excédant la limite de 64 Ko se produit.");break;
- case ERROR_INVALID_MINALLOCSIZE: printf("Erreur : Une erreur de taille d'allocation minimum invalide.");break;
- case ERROR_DYNLINK_FROM_INVALID_RING: printf("Erreur : Une erreur de lien dynamique invalide dans l'anneau.");break;
- case ERROR_INVALID_SEGDPL: printf("Erreur : Une erreur de segment DPL invalide.");break;
- case ERROR_AUTODATASEG_EXCEEDS_64k: printf("Erreur : Une erreur de segment de données dépassant la limite 64 Ko.");break;
- case ERROR_RELOC_CHAIN_XEEDS_SEGLIM: printf("Erreur : Une erreur de relocalisation d'une source exécédant la limite de segment.");break;
- case ERROR_FILENAME_EXCED_RANGE: printf("Erreur : Une erreur de nom de fichier excédant la limite du rang.");break;
- case ERROR_INIT_ROUTINE_FAILED: printf("Erreur : Une erreur d'initialisation de routine a échoué.");break;
- }
- }
Voir également
Langage de programmation - C pour OS/2 - DosFreeModule
Langage de programmation - C pour OS/2 - DosQueryProcAddr
Système d'exploitation - OS/2 - Introduction
Dernière mise à jour : Lundi, le 19 juillet 2010