Une bibliothèque de liens dynamiques ou DLL , permet à une application de charger uniquement le code exécutable minimum nécessaire en mémoire au moment de l'exécution . Chaque fois que le programme appelle une fonction dans une DLL, le système d'exploitation charge la DLL en mémoire en conformité avec les spécifications du programmeur . Tant que le programme en cours ne fait pas référence à une fonction DLL , DLL qui n'a pas besoin d' occuper l'espace . Cela économise beaucoup de ressources et augmente les performances d'exécution. Si la bibliothèque étaient statiques , tout le code de la bibliothèque sera annexée au code exécutable du programme principal et le programme géant aurait à rester dans la mémoire pendant toute la durée de l'exécution. La version Unix ou Linux d'une DLL Windows est une bibliothèque partagée , construite en conséquence avec l'extension ". So . " Windows , Unix et Linux ont des conventions spécifiques pour accéder aux fonctions dans les DLL ou les bibliothèques partagées. Exporter Objets Windows DLL Utilisation dllexport mots-clés
Pour faire une fonction, une classe , un élément de données ou la fonction de membre de classe accessible au programme Windows appelant , vous devez exporter le premier. Une classe ou fonction peuvent être exportés au cours de sa définition en utilisant le " __declspec (dllexport ) " mot-clé avant le nom de fonction, une classe ou une variable , comme suit:
void __ declspec ( dllexport ) MyClass : CObjectName publique { ..... }
Dans le fichier d'en-tête de DLL, mettre ce mot clé avant le nom de la fonction dans une déclaration de prototype. Le " __declspec (dllexport ) " mot-clé stocke les noms de fonction dans la table d'exportation de la DLL. Pour économiser de l'espace que ce tableau occupe , utilisent des nombres ordinaux au lieu des noms de fonctions.
Exportation DLL Windows objets dans les fichiers de définition de module
Comme une alternative à la clé " __declspec (dllexport ) , " créer un fichier de définition de module qui indique le nom de la bibliothèque , description facultative et répertorie les noms de fonctions, les classes et les variables de données dans la DLL avec des valeurs ordinales en option. La valeur ordinale d'une fonction varie de 1 à N, où N est le nombre de fonctions dans la DLL . Le fichier de définition de module a l'extension suivante est un exemple d'un fichier de définition de module, ou un fichier DEF " DEF . ». : .
BIBLIOTHÈQUE ReportWriterDESCRIPTION Cette bibliothèque dynamique contient les fonctionnalités de génération de rapport de MyProduct.RPT_setup @ 1RPT_design @ @ 2RPT_run 3RPT_print @ 4
Si vous créez une classe DLL Microsoft Foundation aide de AppWizard de Visual Studio , l'Assistant génère un fichier squelette. DEF pour le DLL et l'ajouter au projet. Ajoutez des entrées pour les fonctions DLL dans ce fichier. DEF pour les exporter. Le format du prototype de fonction utilisée par le programme appelant doit correspondre au format des entrées de fonction dans le fichier. DEF . Soit utiliser définitions simples dans les deux endroits , ou les définitions dans les deux endroits de manière cohérente.
Importation et d'exportation Extension DLL
Microsoft compilateur spécifique , générée par le compilateur Fondation DLL d'extension de classe se compose généralement de classes réutilisables dérivées de types de classes MFC existantes. Elles sont construites en utilisant une version DLL de MFC , et peuvent être appelées à partir d'applications et les DLL construit en utilisant cette version partagée des MFC . Pour exporter des classes dans les DLL d'extension , utilisez la macro " AFX_EXT_CLASS " avant le nom de la classe comme ceci : Classe CMyViewClass AFX_EXT_CLASS : publique CView {//corps de la classe }; Si vous utilisez un fichier DEF , ajoutez le code de macro suivant au début . et à la fin de l'entête du fichier DLL étendue: # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA // étendu # undef AFX_DATA # define AFX_DATA
Ces directives préprocesseur assurez-vous que les variables MFC et dérivations et exportées de la DLL prolongée .
Importation de fonctions DLL
l'autre côté de l'exportation d'objets à partir de DLL est de les importer dans des applications utilisant le " __declspec (dllimport ) "mot-clé .
exportation C Fonctions pour une utilisation dans C ou C + + exécutables
Si le programme ou la fonction d'appel est écrit en C + + , utilisez la " extern C " directive de préprocesseur dans l'en-tête de la DLL si les fonctions DLL sont écrites en C
Voici un exemple ://MyDLLFunctions.h # ifdef __ cplusplusExtern "C" {# endif__declspec (dllimport ) vide MyFunc01 (); __declspec (dllimport ) vide MyFunc02 (); # ifdef __ cplusplus } /consoles /finaux pour " extern C " directive # endif
Comme une alternative à la spécification "C externe" directive dans l'en-tête de DLL , vous pouvez inclure le fichier d'en-tête de DLL avec un " Externe" C " " wrapper conditionnellement , comme suit :
# ifdef __ cplusplusExtern "C" { # endif
# include " DllPath \\ MyDLLFunctions.h "
# ifdef __ cplusplus } //fin parenthèses pour " extern C " directive # endif