Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment se sert on des Dll

en concret ?

Sujet résolu
Anonyme
    12 avril 2006 à 20:36:58

    Bonsoir.
    Je souhaite savoir comment on utilise une DLL dans le concret.
    J'ai bien compris leur nature,leur fonctionement de facon teorique ...
    Mais une fois une Dll cree par nos soin, y'a t'il une fonction special pour
    appeller les fonctions contenue dans cette Dll depuis un autre executable
    sachant que je travaille plutôt en C++ qu'en C.
    Merci a tous ceux qui saurron me repondre.
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2006 à 21:21:50

      Citation : Davidbrcz

      Bonsoir.
      Je souhaite savoir comment on utilise une DLL dans le concret.
      J'ai bien compris leur nature,leur fonctionement de facon teorique ...
      Mais une fois une Dll cree par nos soin, y'a t'il une fonction special pour
      appeller les fonctions contenue dans cette Dll depuis un autre executable
      sachant que je travaille plutôt en C++ qu'en C.
      Merci a tous ceux qui saurron me repondre.


      En principe, lorsqu'une xxx.dll est crée, un petit fichier xxx.lib est crée en me temps. Celui-ci contien tout ce qu'il faut pout charger et interfacer la DLL. Il suffit donc de le lier à l'application et dans le code de l'application, il n'y a rien à faire de particulier.

      Sinon, il faut explicitement faire ce qu'il y a dans la xxx.lib, c'est à dire
      <liste>
      <puce>appeler la fonction de chargement de la DLL</puce>
      <puce>appeler les fonctions de lien qui vont retourner l'adresse des fonctions.</puce>
      <puce>stocker ces adresses dans autant de pointeurs de fonctions</puce>
      fournir à l'application des fonctions du même nom qui appellent les fonctions de la DLL via le pointeur de fonction correspondant.</puce>
      </liste

      Exemple théorique (je ne connais pas le vrai nom des fonctions de chargement, ça dépend du système, mais le principe est là) :

      /* xxx.c */
      #include "xxx.h"
      #include <dll.h>
      #include <stdlib.h>

      /* globales privees */

      static int (*pf_a)();
      static int (*pf_b)();
      static int (*pf_c)();

      static dll_t *p_dll;

      /* fonctions privees */

      static void init (void)
      {
         if (p_dll == NULL)
         {
            p_dll = dll_load("xxx.dll");

            if (p_dll != NULL)     
            {
               pf_a = dll_function(p_dll, "xxx_a");
               pf_b = dll_function(p_dll, "xxx_b");
               pf_c = dll_function(p_dll, "xxx_c");
            }
            else
            {
               /* erreur grave !*/
               fprintf (stderr, "xxx.dll is missing or corrupted\n");
               exit (EXIT_FAILURE);
            }
         }
      }

      /* points d'entree */

      /* Interfaces des fonctions utilisateur
         Le premier appel de n'importe quelle des
         fonctions provoque le chargement de la DLL.
      */

      int xxx_a(void)
      {
         init ();
         return pf_a();
      }

      int xxx_b(char *a, int b)
      {
         init ();
         return pf_b(a, b);
      }

      int xxx_c(char const *a)
      {
         init ();
         return pf_b(a);
      }


      #ifndef H_XXX
      #define H_XXX
      /* xxx.h */
      int xxx_a(void);
      int xxx_b(char *a, int b);
      int xxx_c(char const *a);

      #endif

      C'est un des rares cas où il est indispensable d'avoir des globales (privées, quand même)
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
      Anonyme
        12 avril 2006 à 21:32:01

        Ok merci -ed- ton code marche et j'ai tout compris.
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2006 à 21:33:45

          Citation : Davidbrcz

          Ok merci -ed- ton code marche


          Euh, du moins en théorie...
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
          Anonyme
            12 avril 2006 à 21:49:25

            Cher zéro,

            J'ai répondu personnèlement à cette question:

            J'ai utilisé l'api windows: et j'ai expliqué:

            J'ai expliquer comment crée une DLL (avec code C)
            J'ai expliquer comment appeler ses fonctions depuis ton executable
            (avec code C)


            j'ai pas expliquer comment charger une image.

            après si tu veux faire du portable tu peux utilisé SDL_Loadso une librairie SDL.

            Voici le lien>>>
            http://www.siteduzero.com/forum-83-28502-les-problemes-dll-resolu.html
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 avril 2006 à 22:22:41

              Nan je ne veux pas faire cela avec des fonction SDL mais pour un algorithme tres personel que je souhaite reutilise dans plusieurs programmes dont une apllication WxWidgets
              EDIT: J'ai mate ton code vite fait .C'a a l'air tres bien fait.
              Merci beaucoup charly90
              • Partager sur Facebook
              • Partager sur Twitter

              Comment se sert on des Dll

              × 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