IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

LoadLibrary / GetProcAddress hors main()


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut LoadLibrary / GetProcAddress hors main()
    Bonjour,

    Je me permets de vous soumettre une question qui vous paraîtra, j'imagine, assez simple car cela fait 3 jours que je cherche sans résultats.

    Dans une appli que je développe, je charge une *.dll grâce à LoadLibrary dans un fichier "loadMaDll.cpp" que j'inclus au début de mon int main(). Tout fonctionne merveilleusement bien. (Je n'ai pas trouvé comment faire un GetProcAddress dans un *.h et je n'ai pas la lib de ma *.dll)

    Mais pour une question pratique, j'aimerais avoir accès aux fonctions se trouvant dans ma *.dll à l'intérieur de mes nouvelles fonctions hors int main().

    Pour parer à ce problème, j'inclus "loadMaDll.cpp" au début de chaque fonction, ce qui à mon avis n'est pas "LA" solution...

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void maFonction(void) {
      #include "loadMaDll.cpp";
      ...
    }
     
    int main() {
      #include "loadMaDll.cpp";
      ...
    }
    Auriez-vous une idée ?
    Merci d'avance.
    Micka

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    je suis debutant aussi donc ma reponse sera peut etre fausse.
    donc
    loadMaDll il a pas un .h ? c'est bizard d'inclure un cpp je trouve.
    Sinon, les #include "*.h" sont generalement dans les .h des classes ou tout en haut de ton fichier .cpp car oui, inclure ca dans une fonction C tres moche.

    J'espere aider un peu.
    ciao

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Malheureusement je n'ai pas réussi à intégrer un loadLibrary dans un .h avec ce code :

    HINSTANCE hDLL = LoadLibrary("maDll");

    typedef int(WINAPI *DLL_maFonction)(int x);
    DLL_maFonction maFonction;
    maFonction = (DLL_maFonction) GetProcAddress(hDLL,"_maFonction@12");

    Merci quand même
    Micka

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je crois que ce que voulais dire eagl1... c'est "elle vient d'ou cette DLL" ? Y a vraiment pas moyen d'avoir le .lib associé ? et surtout... les headers associés ?
    A noter qu'il est possible de récupérer une "partie" du .lib a partir de la DLL seule. Mais il faut les headers associés.
    Une DLL sans header est useless (à mon avis).

    Sinon... pour le LoadLibrary:

    Header "MaDll.h"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifndef MaDll_h_
    #define MaDll_h_
     
    void MaDll_Init(void);
    void MaDll_Uninit(void);
     
    extern void (*MaFonction1DeDll)( ...parametres...);
    extern void (*MaFonction2DeDll)( ...parametres...);
     
    #endif
    Source "MaDll.cpp"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    static HANDLE dllHandle = NULL;
    void (*MaFonction1DeDll)( ...parametres...);
    int (*MaFonction2DeDll)( ...parametres...);
     
    void MaDll_Init(void)
    {
        if (dllhandle) throw .... (already initialized) ....
        dllHandle = LoadLibrary(....);
        MaFonction1DeDll = GetProcAddress(dllHandle,....); if (!MaFonction1DeDll) throw ...
        MaFonction2DeDll = GetProcAddress(dllHandle,....); if (!MaFonction2DeDll) throw ...
     
    }
     
    void MaDll_Uninit(void)
    {
        FreeLibrary(dllHandle); dllHandle = NULL;
    }
    Dans le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
      MaDll_Init();
       ... code appelant MaDll
      MaDll_Uninit();
    ...
    Dans le code nécessitant la DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "MaDll.h"
     
         MaFonction1DeDll( parametres) ;

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Quick Report et impression de données hors BDD
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/08/2002, 09h47
  4. execl rend-elle la main?
    Par chezjm dans le forum C
    Réponses: 16
    Dernier message: 03/06/2002, 18h28
  5. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo