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 :

utilisation des fonctions d'une dll


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut utilisation des fonctions d'une dll
    bonjour,

    j'ai besoin d'appeler des fonctions présentes dans une dll.
    En l'occurence, il s'agit des fonctions Inp32 et Out32 de inpout32.dll.

    Je voudrais les appeler à partir d'un programme développé avec DEV-C++.

    Comment déclare-t-on et appelle-t-on les fonctions d'une dll?

    Merci

  2. #2
    Membre actif Avatar de amaury pouly
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 157
    Points : 219
    Points
    219
    Par défaut
    le mieux c'est récupérer leur adresse dynamiquement:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    // faut définir le prototype de la fonction
    // exemple:(je met au pif car je les connais pas)
    typedef BYTE (*funcIn32)(WORD wPort);
    typedef VOID (*funcOut32)(WORD wPort,BYTE bOut);
    funcIn32 Inp32=NULL;
    funcOut32 Out32=NULL;
     
    HINSTANCE hDll=LoadLibrary("inpout32.dll");
    if(hDll==NULL)
    {
        // erreur
    }
     
    Inp32=(funcIn32)GetProcAddress(hDll,"Inp32");
    Out32=(funcIn32)GetProcAddress(hDll,"Out32");
     
    if(Inp32==NULL || Out32==NULL)
    {
         // erreur
    }
     
    // voilà maintenant il y aplus qu'à faire
    BYTE bRet=Inp32(0x0060);
    Out32(0x0061,0x90);
    // par exemple
     
    // et à la fin du main:
    FreeLibrary(hDll); // hein on l'oublie pas
    bonne soirée

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    salam

    Le mieux a mon avis c'est d'ajouter le .lib de ta dll dans les setting de ton projet d'ajouter le .h qui va dans ton source et d'utiliser tout simplement les fonctions.

    Genre dans ma dll My_DLL.dll j'ai une fonction nommée GetDll();

    Aprés avoir réaliser ce que j'ai dis plus haut dans ton source tu fais :

    GetDll();

    Ca allege le code vous toruvez pas

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    merci à vous pour vos réponses.

    amaury pouly, j'essaie ça demain.

    filtrac, c'est une dll que j'ai récupérée. Comment je fais pour ajouter le .lib?

    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    salam

    Avec cet élément de précision effectivement la premiere solution donnée n'est meme plus une alternative.

    A moins que j'en apprenne sur les dll.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2002
    Messages : 290
    Points : 322
    Points
    322
    Par défaut
    En fait les choses dépendent du compilo que tu utilises et de celui utilisé pour faire la Dll...

    A priori avec gcc (le compilo de Dev-C++) le .lib associé à la Dll est inutile, il suffit de mettre la Dll elle-meme.

    Par contre il faut le header associé

  7. #7
    Membre actif Avatar de amaury pouly
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 157
    Points : 219
    Points
    219
    Par défaut
    je sais pas où tu as vue qu'il suffisait d'un header !! Moi j'inclu une dll, si j'ai pas la lib, il compile pas(ou plutôt il link pas) . Même avec le header .

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2004
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Avec MinGW, le compilo de dev-cpp, il faut ajouter le fichier portant l'extension .a dans les options du linker.

  9. #9
    Membre actif Avatar de amaury pouly
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 157
    Points : 219
    Points
    219
    Par défaut
    oui en effet il faut les fichiers .a pour compiler . Encore que certains fichiers .lib peuvent être transformé en .a . Mais le problème reste le même: il faut un fichier lib .

  10. #10
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    donc, en résumé, pour utiliser une dll "récupérée", il n'y a que la méthode d'amaury pouly.

    A+

  11. #11
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    bon, je viens d'essayer.

    le compilateur ne connait pas HINSTANCE.

    D'ailleurs, d'une manière plus générale, où doit-il trouver les définitions de LoadLibrary, GetProcAddress, etc ?

    A+

  12. #12
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    bon, en insérant #include <windows.h>, il ne me reste plus qu'une erreur:

    assignment to `int (*)(short unsigned int, int)' from `int (*)(short unsigned int)'

    due à la ligne :
    Out32=(funcIn32)GetProcAddress(hDll,"Out32");

    sachant que j'ai modifié la déclaration que l'on m'avait donnée de la manière suivante:
    typedef int (*funcIn32)(unsigned short wPort);
    typedef int (*funcOut32)(unsigned short wPort,int bOut);


    N'étant qu'un simple amateur (éclairé), je ne vois pas comment résoudre ce problème.

    A+

  13. #13
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    Trouvé

    il y avait une petite erreur dans l'exemple que je n'avais pas vue. Après rectification:
    Out32=(funcOut32)GetProcAddress(hDll,"Out32");

    A+

  14. #14
    Membre actif Avatar de amaury pouly
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 157
    Points : 219
    Points
    219
    Par défaut
    non çà doit être cette ligne qui bug en effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Out32=(funcIn32)GetProcAddress(hDll,"Out32");
    il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Out32=(funcOut32)GetProcAddress(hDll,"Out32");
    j'avais fait un copier coller mais j'avais oublier de changer le type.

  15. #15
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2004
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2004
    Messages : 428
    Points : 446
    Points
    446
    Par défaut
    je venais d'éditer et nos messages se sont croisés.

    Merci pour ta réponse en tout cas.

    Reste à tester si j'accède bien à mes I/O.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 25/06/2007, 10h45
  2. Utiliser des fonctions d'une DLL C++
    Par ced001 dans le forum Delphi
    Réponses: 2
    Dernier message: 09/02/2007, 17h03
  3. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 17h59
  4. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 11h42

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