VC++et DLL (runtimes) - Programmation
Marsh Posté le 15-06-2001 à 19:51:21
Si tu as le source des MFC (c'est fourni, non?) tu devrais pouvoir tout recompiler en statique, je pense.
Mais, bon, ton approche me semble bizarre.
A+,
Marsh Posté le 18-06-2001 à 12:13:42
Ce que je souhaiterai c'est distribuer mes exes avec le moins de dll possible. Donc si je défini mon projet comme utiluisant les mfc en statique, j'aurais pas besoin des dll ?
Marsh Posté le 18-06-2001 à 14:29:43
Kyle_Katarn a écrit a écrit : Ce que je souhaiterai c'est distribuer mes exes avec le moins de dll possible. Donc si je défini mon projet comme utiluisant les mfc en statique, j'aurais pas besoin des dll ? |
c'est exatement ce qu'il faut faire dans ton cas...
Marsh Posté le 18-06-2001 à 15:06:56
Au début tu as un assistant pour créer ta MFC.
A une étape on te demande
Shared DLL
Static Linked Library.
Tu prens l'option Static linked Lib
Marsh Posté le 18-06-2001 à 19:26:35
ok merci.
Et quand on a crée en dynamique, y'a moyen de passer enstatique sans se repayer tout le soft à écrire ?
Marsh Posté le 19-06-2001 à 23:46:51
sans probleme, dans les settings, tu choisis Use MFC in a Static Library et ca marche.
Une petite mise en garde cependant : le fait de linker des dll en statique est un peu crade. Une dll c'est fait pour etre partagee par plusieurs process en meme temps. Si chaque process s'amuse a linker en statique des dll qui pouraient etre communes, tout l'avantage de la factorisation est perdu, ca ne fait qu'encombrer la mem de l'utilisateur avec n fois le meme code.
Marsh Posté le 20-06-2001 à 16:00:32
oui mais distribuer 2 Mo de fichiers juste au cas ou ... C'est un peu lourd aussi
Marsh Posté le 20-06-2001 à 16:10:40
wpk a écrit a écrit : sans probleme, dans les settings, tu choisis Use MFC in a Static Library et ca marche. Une petite mise en garde cependant : le fait de linker des dll en statique est un peu crade. Une dll c'est fait pour etre partagee par plusieurs process en meme temps. Si chaque process s'amuse a linker en statique des dll qui pouraient etre communes, tout l'avantage de la factorisation est perdu, ca ne fait qu'encombrer la mem de l'utilisateur avec n fois le meme code. |
De toute façon Microsoft à fait un article où il explique que ce n'est pas un toujours vrais, et qu'une dll peut être lancé plusieur fois en mémoire.
Dans les prochaines versions de windows on ne pourra plus partager la même dll entre plusieurs programmes. Chaque programme aura sa propre dll même si elles sont identiques. Ceci dans un soucis de rendre windows plus stable
Marsh Posté le 20-06-2001 à 17:27:16
wpk a écrit a écrit : sans probleme, dans les settings, tu choisis Use MFC in a Static Library et ca marche. Une petite mise en garde cependant : le fait de linker des dll en statique est un peu crade. Une dll c'est fait pour etre partagee par plusieurs process en meme temps. Si chaque process s'amuse a linker en statique des dll qui pouraient etre communes, tout l'avantage de la factorisation est perdu, ca ne fait qu'encombrer la mem de l'utilisateur avec n fois le meme code. |
Oui mais...
du point de vue vitesse d'execution, les Dlls sont plus lentes, dans le cas d'un link statique seul le code utile est transfere dans l'executable, et au moins on est sur de ne pas oublier de distribuer la Dll. Sans compter sur toutes ces Dlls dans les repertoires de Windows, dont personne ne sait si elle sont utiles ou restent apres une desinstallation incomplete...
Non vraiment, mieux vaut linker en static a mon avis.
Marsh Posté le 20-06-2001 à 19:05:33
ok merci beaucoup !
Et dans ce cas là, de quoi à besoin un projet VC++ avec MFC linké en static ? msvcrt.dll mfc42.dll ? aucun des 2 ?
Marsh Posté le 20-06-2001 à 20:34:36
Kyle> quand tu lui dis de te linker ton proj avec les MFC en statique, t'as pas besoin de specifier les dll a linker, c'est le linker qui va faire le boulot a ta place.
BenB> les dll sont plus lentes la premiere fois que tu charge un prog qui en fait usage ensuite, la meme dll est utilise par plusieurs process et puisqu'elle est deja en memoire, tu gagne du temps sur les chargements ulterieurs...
Citation : Sans compter sur toutes ces Dlls dans les repertoires de Windows, dont personne ne sait si elle sont utiles ou restent apres une desinstallation incomplete... |
on n'est jamais oblige de mettre ses dll dans le rep de windows, on peut tres bien les laisser a cote de l'executable.
seblamb>
Citation : De toute façon Microsoft à fait un article où il explique que ce n'est pas un toujours vrais, et qu'une dll peut être lancé plusieur fois en mémoire. |
Je vois plus bien alors l'interret d'une dll. Puis cette histoire explique ptetre en partie le fait que XP a besoin d'au moins 256Mo de ram pour un fonctionnement normal.
Marsh Posté le 22-06-2001 à 15:06:19
Ce que je voulais dire c'est "est ce qu'une fois linké en statis il me faut qd même distrib une dll avec le soft ?"
Marsh Posté le 23-06-2001 à 15:03:53
C'est bon, j'ai vérifié avec le dependency walker 2.1, y'a plus besoin des runtimes .... y'a bon !!
Marsh Posté le 15-06-2001 à 19:28:09
Avec VC++ et mfc, y'a un moyen (passage en statique ou autre) pour ne pas avoir besoin de mfc42.dll et msvcrt.dll ?