DLL

Résolu
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 7 août 2004 à 13:04
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 7 août 2004 à 18:24
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 14:26
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 16:14
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 17:28
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 13:29
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 14:08
Quel est donc l'interet de choisir le mode static ou dynamique ?
Et pour la portabilité de l'executable ?

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 14:16
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++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 14:22
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 14:44
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 15:35
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 15:42
Le lib sert en phase de dev, pas en redistribution client.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 16:00
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 16:03
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 16:29
Ah ben voila ca fonctionne a merveille !

Merci tonton ;)

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 16:54
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 17:06
Nomme tes fonctions de maniere claire pour eviter toute ambiguite.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 17:10
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 août 2004 à 18:24
Eh bah dis donc t'es la bible du C++ toi !

Shell
0
Rejoignez-nous