- Imagine que tu est 6 fonctions (fonction1, fonction2,...) a inclure dans ta DLL, decrites dans 4 fichiers C (fichier1.c, fichier2.c,...)
- Imagine que tu est VisualC++ installe.
Voila ma recette :
- Lancer vcvars32.bat
- Fabriquer les .obj pour chaque fichier, ce qui ce fait avec
cl [options de compilations] fichier1.c -Fofichier1.obj -c
Il ya une option speciale du compilateur Microsoft pour optimiser specialement pour une DLL...
- Avoir un fichier .DEF (un fichier Ascii tout simple), qui permet de dire quelles fonctions vont figurer dans ta DLL, avec quel nom et quel position... Tu peut aussi preciser d'autres parametres dans .DEF, voir sur MSDN. Ici le fichier aura cette tete :
DESCRIPTION "Ma DLL avec 6 fonctions"
EXPORT
fonction1 @1
fonction2 @2
fonction3 @3
fonction4 @4
fonction5 @5
fonction6 @6
Les numeros avec @ doivent etre uniques. En fait, j''ai un fichier XML avec mes noms fonctions, et une jolie feuille de style XSLT qui me genere mon .DEF avec les numeros, pour etre sur de faire de doublon. Apellons ce fichier MaDll.def
- Fabriquer la DLL, ce qui est le travail du linker. Elle s''apellera MaDll.dll
link -dll -def:MaDll.def -out:MaDll.dll fichier1.obj fichier2.obj fichier3.obj fichier4.obj
Et tu obtiendras 2 fichiers, MaDll.dll ainsi que MaDll.lib.
- Pour utiliser ta dll, tu dois lier l''executable avec MaDll.lib
Mais ma recette n''est pas encore parfaite... Je ne peut pas faire d''entree sorties car elles plantent systematiquement avec un programme qui utilise la Dll (les fonctions d''ES sont dans la DLL). Alors que si je lie statiquement, ca marche. Je ne sais pas pourquoi...