DLL

[Résolu]
Signaler
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Yep,
Juste une ptite question d'information.
Quel sont les différences entre un linkage dynamique et statique d'une DLL dans un programme, d'un point de vue compilation?

Shell

17 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Bien sur, si c'est LA dll de TON prog, alors faut le lier au linkage.
Le code kernel de chargement de l'OS ira toujours plus vite que les appels LoadLibrary... de ton prog.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
IMPEC, le linker se sert du lib pour mettre les points d'entree dans l'exe. Tu ne vois jamais un lib dans un setup (a moins que soit pour de la dev).

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
En lisant Richter tu aurais su l'algo de recherche du chargeur.
winSys
Win
TonProg sur sa currentdirectory
Dossiers connus des variables d'environnemnt
ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Statique: le linker va marquer dans l'exe les points d'entree necessaires dans la dll cible. Au lancement de l'exe, le chargeur de l'OS chargera la dll et verifiera les differents points d'entree de la dll. Si au moins 1 seul truc pas bon, exe ne finira pas son chargement et OS affiche erreur.
Dynamique: OS ne sait rien des besoins de l'exe, au developpeur de tout gerer.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Quel est donc l'interet de choisir le mode static ou dynamique ?
Et pour la portabilité de l'executable ?

Shell
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Si tu veux prendre en charge les winbebes(95, 98), faut des fois charger une dll en dynamique car ces vieux systemes n'ont pas tout d'implemente. Tu evites ainsi l'InjureBox de l'OS et tu adaptes ton prog. Voila un exemple de cas.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
A mon avis plus grand monde doit avoir ces dinausores.

Donc, si je comprend bien, le mieux c'est donc d'utiliser un chargement statique pour toutes les fonctions contenu dans ma DLL.

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Yep je vais faire comme ca alors.

Les directives #import sont donc nettement plus rapide que des appelle a LoadLibrary.
Bon a savoir tout ca.

Merci coco BriNious.

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Ah oui autre chose encore.
Le soucis c'est que ma DLL doit être redistribué sans le .lib.
Pour un chargement statique il faut le .lib. Je ne peux pas faire sans ?

Shell
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Le lib sert en phase de dev, pas en redistribution client.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Oulalala je comprend plus rien.
Moi j'ai mon programme et ma DLL.
Quand je vais distribuer mon programme, il n'y aura que lui et la DLL.

Maintenant comment faire pour utiliser ma DLL en statique ?

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Aj je pense avoir saisie.

En fait le linkage implicite veut dire que lorsque je devellope mon programme client, je me sert du .lib.
Ensuite lorsque je vais redistribuer mon application, je n'aurai pas besoin de me servir de mon .lib.
Il y aura juste la DLL et l'executable.

Par contre ceux qui voudront utilisé ma DLL devrons utiliser un chargement dynamique car ils n'auront pas le .lib.

C'est ca ?

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Ah ben voila ca fonctionne a merveille !

Merci tonton ;)

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Ah au fait une ptite question m'est venu a l'esprit.
Si mon programme utilise plusieurs DLL, a la compilation je vais linker avec tout mes .lib, mais ensuite lorsque je vais importer mes différentes fonctions comment le programme va t'il faire pour savoir dans quelle DLL se trouve la fonction en question ?

Et si dans DLL1 j'ai une fonction Init() et que dans DLL2 j'ai aussi une fonction Init() comment cela va etre interpreter ?
Va y avoir de la redefinition de fonction non ?

Shell
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Nomme tes fonctions de maniere claire pour eviter toute ambiguite.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Yep,
C'est le mieux a faire je pense.
Par contre est ce que je suis obligé de mettre ma DLL dans le meme repertoire que mon executables ou dans le repertoire systeme de windows ?

Puis-je la mettre autre part ? Dans un sous dossier par exemple ?

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Eh bah dis donc t'es la bible du C++ toi !

Shell