Partage
  • Partager sur Facebook
  • Partager sur Twitter

[DLL]ça sert à qoui exactement?

...et commant les programme-t-on

Sujet résolu
    27 février 2008 à 19:51:28

    Salut les Zér0s,

    bon, voilà, la question est posée, j'attends les réponses ^^
    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2008 à 21:53:32

      Oui, et au lieu d'être intégrées à l'exe ces fonctions sont dans des fichiers à part, c'est tout :) .
      • Partager sur Facebook
      • Partager sur Twitter
        28 février 2008 à 10:46:32

        Merci, mais comment les programme-t-on (que mets-on dedans) et comment dit-on au programme qu'il en a besoin?
        • Partager sur Facebook
        • Partager sur Twitter
          28 février 2008 à 11:33:46

          dedan tu met des fonctions.Pour les programmer,il faut regler dans les options de ton projet que se soit une dll(sa dépend des IDE).
          • Partager sur Facebook
          • Partager sur Twitter
            28 février 2008 à 11:37:05

            Pour les programmer, sous Windows c'est avec l'api Win32, sous Unixoïde c'est des fichiers C standards. Tu implémentes tes fonctions, et après tu compiles avec une option spéciale et tu as ta bibliothèque dynamique (ça dépend des compilateurs, pas des IDE : sous C::B et Dev-C++ la manip est la même, c'est le même compilateur).

            Pour utiliser ces fonctions dans ton programme, tu peux par exemple lier la DLL à ton programme (comme tu lierais un .a/.lib), et là, au lieu d'inclure le contenu de la DLL au programme, le linker fera les "références" vers le fichier dynamique.
            Ou alors, tu peux utiliser l'api Win32 ou dlopen (sous Unixoïde pour ce dernier) pour ouvrir une DLL avec ton programme et récupérer les fonctions qu'il y a dedans. Ça, c'est ce que tu fais quand tu ne connais pas la DLL à la compilation (typiquement, des plugins/toussa).

            Tu peux facilement trouver toutes ces informations sur internet.
            Mais ça te servirait à quoi de faire une DLL ?
            • Partager sur Facebook
            • Partager sur Twitter
            J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
              28 février 2008 à 11:48:00

              OK, mais quand crée un nouveau projet DLL avec Dev-C++, il me crée 2 fichiers :

              dll.h :

              1. #ifndef _DLL_H_
              2. #define _DLL_H_
              3. #if BUILDING_DLL
              4. # define DLLIMPORT __declspec (dllexport)
              5. #else /* Not BUILDING_DLL */
              6. # define DLLIMPORT __declspec (dllimport)
              7. #endif /* Not BUILDING_DLL */
              8. class DLLIMPORT DllClass
              9. {
              10.   public:
              11.     DllClass();
              12.     virtual ~DllClass(void);
              13.   private:
              14. };
              15. #endif /* _DLL_H_ */


              et dllmain.cpp :

              1. /* Replace "dll.h" with the name of your header */
              2. #include "dll.h"
              3. #include <windows.h>
              4. DllClass::DllClass()
              5. {
              6. }
              7. DllClass::~DllClass ()
              8. {
              9. }
              10. BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
              11.                        DWORD reason        /* Reason this function is being called. */ ,
              12.                        LPVOID reserved     /* Not used. */ )
              13. {
              14.     switch (reason)
              15.     {
              16.       case DLL_PROCESS_ATTACH:
              17.         break;
              18.       case DLL_PROCESS_DETACH:
              19.         break;
              20.       case DLL_THREAD_ATTACH:
              21.         break;
              22.       case DLL_THREAD_DETACH:
              23.         break;
              24.     }
              25.     /* Returns TRUE on success, FALSE on failure */
              26.     return TRUE;
              27. }


              Alors est-ce que j'efface tout et je mets ce que jeu veux, ou alors il faut mettre les fonctions à un endroit particulier?
              • Partager sur Facebook
              • Partager sur Twitter
                28 février 2008 à 18:32:23

                Déjà : pourquoi veux-tu créer une DLL ? C'est plutôt long et compliqué par rapport à ce que ça te rapporte comme avantages (à notre niveau de programmation).

                Ensuite, tu peux chercher sur internet, il y a souvent des tutoriaux. En l'occurence, il me semble que tu dois rajouter tes fonctions dans le projet et compléter le code préécrit par dev-c++.
                • Partager sur Facebook
                • Partager sur Twitter
                J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                  28 février 2008 à 18:43:17

                  ok, merci.

                  C'était juste une curiosité...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 février 2008 à 21:08:57

                    Les DLL servent le plus souvent lorsque ton prigramme a des mises à jour comme ça sa évite à l'utilisateur de réinstaller le logiciel il y a juste une mises à jours des dll.
                    le soucis c'est que les ancienne fonction ne doivent surtout pas changer de nom sinon ton programme plantera.
                    Bon sous linux je ne sais pas comment ça marche.
                    ( fichier .so ??)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    :)
                      28 février 2008 à 22:40:15

                      Les dll sont généralement utilisées dans 2 cas:

                      • L'utilisation d'une bibliothèque standard, c'est typiquement le cas de Qt, des wxWidget, des MFC... Le code de la Dll est partagé entre les applications qui l'utilisent, la plupart des runtime, et des services du système d'exploitation sont des dll, pour alléger le système. Elles peuvent dans ce cas aussi assurer la compatibilité, par exemple votre programme, va appeler des dll pour certaines fonctions, dll qui auront une interface en commun, mais dont le code sera différent selon que votre programme tourne par exemple sous Windows XP ou sous Windows Vista. Le même exécutable tournera pareil sur les deux OS (en théorie :p ).
                      • La personnalisation de l'application, typiquement dans ce cas de figure, l'application délègue certains traitements qui ne seront pas les mêmes selon les utilisateurs. L'exemple qui me vient à l'idée est celui de l'exploitation d'une base de données. Supposons que votre programme exploite une base de données, un client vient vous voir et veut absolument exploiter une base de données Oracle, un autre voudra MySQL, un autre SQL Server... Les dll sont un bon moyen de les contenter tous. Vous définissez une interface générique, et vous développez autant de DLL que nécessaire pour exploiter toutes les bases de données que vous voulez. Si un client vient et veut une autre base de données, vous n'avez que la dll d'interface à développer pour que l'application puisse travailler avec ce nouveau type de base de données, le reste de l'application fonctionnera, parfaitement, et si vous ajoutez des fonctionnalités vous les développez une seule fois, pour tout le monde.


                      Il en va bien sûr de même pour le matériel, par exemple supposons que votre programme doivent exploiter deux cartes électroniques différentes, vous pouvez implémenter dans votre programme le support des deux cartes, mais vous pouvez aussi déporter ça sur des dll, ainsi si une nouvelle carte arrive, vous n'avez qu'une dll de support à écrire, le reste ne bouge pas. C'est comme ça que sont réalisés les drivers de cartes vidéo, de carte réseau...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                        29 février 2008 à 19:06:28

                        Citation : moii

                        Bon sous linux je ne sais pas comment ça marche.



                        Tu compiles tes fichiers .c en fichiers .o (c'est des fichiers "normaux", avec des fonctions dedans, mais sans main et avec éventuellement deux fonctions spéciales, _init et _quit je crois). Ensuite, tu linkes le tout en .so (y'a une commande particulière pour ça) et tu obtiens ton so.

                        Ensuite, en admettant que ta bibliothèque s'appelle machin, le fichier so machin.so, et le header qui regroupe les prototypes marchin.hpp, tu crées ton application en incluant machin.hpp dans tes fichiers et en utilisant ses fonctions. Puis, au moment de l'édition des liens, tu linkes machin.so comme si c'était une bibliothèque statique, le linker s'occupera du reste.
                        Pour le chargement d'un SO inconnu, il existe dlopen (cf man).
                        • Partager sur Facebook
                        • Partager sur Twitter
                        J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                          29 février 2008 à 19:12:09

                          Je suis sous windows pour programmer!


                          Mais je préfèr linux (le problème c'est surtout les pilotes de carte wifi)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 mars 2008 à 11:02:13

                            Je disais juste ça pour moii ( :p ).

                            Si ton problème est résolu, y'a un lien tout en bas de cette page : « indiquer que mon problème est résolu ». Click ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.

                            [DLL]ça sert à qoui exactement?

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown