Réponse à Ouf_ça_Passe qui a posé une question sur un autre topic.
Une DLL est une bibliothèque, c’est-à-dire un ensemble de fonctions et de fonctionnalités regroupées dans un fichier unique.
Ce n’est pas un fichier texte. C’est un fichier exécutable (.exe) mais qui NE FONCTIONNE PAS TOUT SEUL.
C’est un fichier qui « aide » des .exe à bien fonctionner.
Disons dès le début que l’utilisation des DLLs dans un programme n’est pas recommandée pour les débutants dans la programmation, car elle utilise des techniques plus poussées.
Mais pourquoi ces fichiers DLL ?
Il existe des milliers de langages de programmation : pourquoi tout ce beau monde ?
Parce qu’il n’existe pas un seul langage qui peut tout faire : chaque langage est plus ou moins spécialisé.
Comme dans la vie, le généraliste touche à tout mais il n’est pas spécialisé.
Le spécialiste connait parfaitement son domaine et ignore ou ne connait qu’un tout petit peu les autres domaines.
C’est pareil pour les langages de programmation : chaque langage est plus ou moins puissant dans certains domaines et laisse à désirer (voire nul) dans d’autres.
Alors pour remédier à ces faiblesses, on a recours à un autre langage pour profiter de l’une (ou plus) de ses puissances.
Avec cet autre langage (qui peut être très différent de votre langage préféré) on crée des fichiers DLL permettant de renforcer ce dernier et d’augmenter ses possibilités de programmation. C’est aussi pour éviter de réinventer à chaque fois l’eau chaude, le fil à couper le beurre et la mauvaise blague de Papydall.
Ces fichiers DLL sont compilés dans le langage qui a servi à leur création et peuvent être utilisés par n’importe quel autre langage qui sait manipuler les DLLs.
Il est à noter que la célébrissime KGF.DLL de Klaus est développée à partir du langage DELPHI.
D’autres langages permettent le développement des DLLs, à titre d’exemple : Visual C++, Delphi, Visual Basic, free basic, etc.
Chaque langage possède ses propres directives pour obtenir un fichier DLL.
Une DLL contient donc du code écrit, en général, dans un langage autre que celui que vous utilisez.
En réalité une DLL n’est pas écrite pour être utilisée par un langage particulier, mais tout langage (sous réserve qu’il sache manipuler les DLLs) peut en profiter.
Une DLL contient des APIs : API signifie Application Programing Interface.
C’est en quelque sorte l’habillage de toutes les fonctions disponibles au sein des DLLs.
Une API peut être utilisée par un langage comme Panoramic sous forme de fonction.
Théoriquement, pour utiliser une DLL, il suffit de savoir laquelle effectue le traitement souhaité, quels arguments (paramètres) il faut lui envoyer, et quel type de valeur elle retourne.
Pour mettre la théorie en pratique :Nous allons créer une DLL et l’utiliser dans un programme Panoramic.
La fonction Atn2(x, y) qui n’est pas définie dans Panoramic, calcule l’Arc Tangente de y/x en tenant compte des signes de Y et de X.
Elle est différente de la fonction atn(x) qui est présente en PANORAMIC.
Panoramic ne permet pas de créer des DLLs, nous allons utiliser Free Basic qui le permet.
En Free Basic, ça donne
- Code:
-
' DLL atn2 en FreeBasic par Papydall
' calcul l'ArcTangente(y/x) en tenant compte des signes de X et de Y.
' Le résultat (en radians) appartient à l'un des 4 quadrants.
' compilez cette DLL ainsi :
' fbc atn2.bas -dll
extern "Windows-MS"
function atn2(byref x as double, byref y as double,byref resultat as double) as integer export
' Atn2 - Arc tangente de Y/X
' arc tangente de Y/X --> retourne les valeurs dans les 4 quadrants en radians
dim pi as double
dim result as double
pi = 4*atn(1)
If x = 0 then
result = Sgn(y) * pi/2
Else
If x > 0 then
result = Atn(y / x)
Else
if x < 0 and y = 0 then
result = atn(y / x) - sgn(x) * pi
else
result = Atn(y / x) + Sgn(y) * pi
end if
End if
end if
resultat = result
return resultat
end function
end extern
La compilation de cette DLL se fait comme ceci :
fbc atn2.bas –dll
On obtient notre fichier : atn2.dll
Nous allons utiliser notre DLL en Panoramic :
- Code:
-
dim x,y,resultat ,i%
x = int(rnd(100)-50) : y = int(rnd(100)-50)
dll_on "atn2.dll"
x = int(rnd(100)-50) : y = int(rnd(100)-50)
i% = dll_call3("atn2",adr(x),adr(y),adr(resultat))
print "atn2(";x;",";y;") = ";resultat ;" radians = ";resultat*180/pi;" dégrés"
dll_off
Comme on voit, l’utilisation des DLLs permet de contourner certains manques et d’apporter plus de souplesse dans la programmation.
Mais on ne doit envisager de les utiliser que quand on aura acquis les bases solides de la programmation.
Vous trouvez sur mon Wedav un dossiers
Mes DLL contenant :
format.dll une DLL pour faire comme dans le bon vieux temps des autres Basic PRINT USING
testFormat.baset un dossier
trigo qui contient :
trigo.dll contenant 18 fonctions trigonométriques qui ne sont pas présentes dans Panoramic
testTrigodll.bas : un code Panoramic pour montrer comment on utilise trigo.dll
trigo.dpr code source en Delphi de trigo.dll