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

MFC Discussion :

[v6.0] Importer une DLL


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut [v6.0] Importer une DLL
    Bonjour,

    je d�bute sur visual. Je connais assez bien le C++ pour avoir cr�er des prog sous linux avec un bon �diteur de texte et compilation en ligne de commande.

    L� je d�bute et je souffre pour un truc tout b�te (j'en suis s�r).
    J'ai une petite appli MFC qui doit lancer deux m�thodes qui se trouvent dans une dll.

    Je n'arrive pas � trouver la m�thode de l'importation d'une dll pour les nazes comme moi, qui m'explique pas � pas comment faire.

    j'ai bien vu qu'il fallait linker le .lib de ma dll, mais j'ai toujours un message qui me dit qu'il ne reconnait pas ma m�thode.

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Normalement, tu as besoin du .lib et du header.

    Quel est le message exactement ? Est-ce une erreur de compilation ou d'�dition de liens?

    La DLL elle-m�me, en quel langage est-elle programm�e ? (oui, cela PEUT avoir une influence)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirm� Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par d�faut dll
    Bonsoir,

    Est ce que tu as inclus le .h de ton dll ?

    Sinon regardes ce lien de la FAQ par Farscape :
    http://c.developpez.com/faq/vc/?page=DLL#MakeDynDll

    PS : C'est gr�ce � cet aide que j'ai appris a linker un dll sous VC6.

    A bient�t

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Bonjour

    Comme toi lors de mes d�but avec les DLL j'ai �t� assez perturb�. J'en ai tir� quelques id�es. Que toutes personnes me corrige si je dit des �normit�s.

    J' ai repere au moins 3 fa�ons diferentes d'utiliser les DLL.

    1- Si c'est une DLL proprio, a la compilation tu as le .lib et le .h
    tu inclue le .lib dans le link de ton projet et le .h avec un #include et tu recupere directement tes fonctions et classe.

    2- Si tu n'a pas le .h et que la DLL � exporter les fonctions avec __declspec(dllexport) tu utilise le __declspec(import) pour la recuperer
    et la faq de farscape et ideal

    3- si tu exporte ta fonction avec int __stdcall nomfct (int var); et un .def
    il faut charger dynamiquement la DLL avec


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef int (CALLBACK* NOMFCT)(int);
     
    HINSTANCE hClcltr=LoadLibrary("Mydll.dll");
    NOMFCT	lpfnfct;
    lpfnfct = (NOMFCT)GetProcAddress(hClcltr,"nomdelafonction");
     
    // pour utiliser la fct
     
    mavarderetour = lpfnfct(monint);
     
    FreeLibrary( hClcltr ); /liberer la lib
    cordialement en esperant t'avoir aid�

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    La dll est en c++, j'ai la lib et le header.

    Mon message d'erreur est le suivant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    C:\Appnt\SCS\AMIN\AMINDlg.cpp(199) : error C2065: 'FindListe' : undeclared identifier
    En gros, je vais vous dire ce que j'ai fait pour essayer de linker ma dll.

    1- J'ai copi� les fichier MaDLL.dll, MaDLL.lib et madll.h dans mon dossier AMIN (du nom de mon projet)
    2- J'ai ouvert mon projet sous visualC++, et ensuite : Project->Setting->Link j'ai tap� : MaDLL.libe et valid�
    3- Dans mon main, j'ai ajout� #include"madll.h"

    Ensuite j'essaye d'utilser une des m�thodes de ma dll, et j'ai le message pr�c�dent.
    Il semble que le link fonctionnne puisqu'avant j'avais mis le header � un autre endroit, et j'obtenais l'erreur suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    AMINDlg.obj : error LNK2001: unresolved external symbol "struct HWND__ * __cdecl FindListe(void)" (?FindListe@@YAPAUHWND__@@XZ)
    Or maintenant, je n'ai pas de message d'erreur sur le link mais sur la d�claration de ma m�thode.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    est tu sur que le nom de ta fonction lors de la compilation de ta DLL ne t'as pas decor� les noms de tes fonctions?

    si oui va voir ce post

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_Calling_DLL_Functions_from_Visual_Basic_Applications.asp

    Ce post sur msdn explique la decoration des noms et te permet de resoudre ce pb en creant un .def

    Courage

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    Je suis s�r du nom de ma fonction (j'ai v�rifi� dans mon header).

    Le lien que tu me donnes c'est pour utiliser une dll avec VB, et moi c'est avec visual C++

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    ne faut 'il pas charger la dll � un moment dans mon code ??

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    normalement non si tu as le . lib et le .h

    J'utilise le chargement de la DLL uniquement qd je n'ai que le .DLL

  10. #10
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Peux tu nous montrer ton .h que tu inclus de la DLL pour voir comment tu exporte tes fonctions .

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Juste unepetite info, tu emploie le mots methodes, c'est une fonction ou la methode d une class que tu exporte et que tu veux utiliser ?

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    Et si l'on part du fai que je n'ai pas le lib ni le header (puisque j'ai un pb).
    Quelles sont les �tapes ?

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    1 - Copier le .DLL dans le repertoire ou sera l'exe

    2 - dans ton code creer un typedef par fonction que tu veux utiliser,
    si par exemple j'ai une fonction du genre int mafonction(int a);

    tu cree en dessous des includes
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    typedef int (CALLBACK* LPFNMAFONCTION)(int);
    3- charger dynamiquement ta fonction et l'utiliser avec

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    HINSTANCE hClcltr=LoadLibrary("MaDll.dll");
    LPFNMAFONCTION lpfnmafonction; //pointeur sur ma fonction
     lpfnmafonction = (LPFNMAFONCTION)GetProcAddress(hClcltr,"nomdelafonction"); // association du pointeur et de la fonction
    4 - utiliser la fonction

    int a,b;

    5 - liberer la DLL


    Ca marche pour moi avec des dll exporter avec __stdcall et un .def

    bon courage

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    fonction alors.

    J'ai �galement le .def pour ma dll.

  15. #15
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Peux tu nous donner ton .H pls

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #include <windows.h>
    #include <commctrl.h>
    #include <stdio.h>
    #include "resource.h"
    #define NomFenetreAriane "Ariane Accueil"
     
     
    #define MAX_NB_PROCESS	512
    #define MAX_LONG_STRING	256
    #define t1 10000
     
    bool TesteFille(HWND Fille, char Classe[255]);
    bool ChercheFille(HWND Mere, char Classe[255]);
    BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam);
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
    int  ChangeURL(char * pch_NewURL,char * pch_OldURL);
    int  Ariane(char pch_Appel);
    HWND FindListe();
    HWND FindNiveau1();
    HWND FindImpala(char * cLibelle, char * cBdd);
    int  ActiveImpala(char * cLibelle, char * cBdd);
    int  Connexion(HWND phwListe, unsigned puMessage, unsigned long wParam, char * lParam);
    int  ActiveListe(HWND phwListe, unsigned puMessage, unsigned long wParam, char * lParam);
    int	 EnvoiTouches(HWND phwNiveau1, int pnFx);
    void CreeBarreOutils(HWND fenetreBT, int height, int decalage, int ajustement);
    void SupprimeBarreOutils(HWND fenetreBT);
    int  BoutonAriane(char * pszIdAppel, char * pszBouton);
    char * CentreCourant(HWND phw_Liste);
    char * CentreCourantN1 (HWND phw_N1);
    char * GetVarEnv(char * variable);
    bool IsPopup(HWND phw_Fenetre);
    bool bKillPrevInstance(char *);
    bool bShowToolTip(char *);
    int Ecr_Log(char [255]);
    int Affichebarre (char * variable);
    int AfficheFenetre (char * variable, char * titre);
    int RechercheIE (char * titre);
    int FindIE (char * variable, char * url);
    HWND hwndFindWindow(HWND hwndParent, char * sClassName);
    int ChargeIE (char * url);
    char * recupIP();
    char * DateDerniereModification(char * fichier);
    char * envoiInfo(char * info);
    int copie_fichier(char * nom);
    int lanceFichier(char * chemin);
    void AvantPlan(char *titre, char * classe);
    pourquoi c'est si compliqu� ?

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    tu n' a pas exporter tes fonctions dans ton .h ?

    typiquement dans le .h pour ta fonction HWND FindListe();

    tu dois mettre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    __declspec(dllexport) HWND FindListe(void);
    puis recompiler ta DLL

  18. #18
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    si tu as le .def, tu connais les noms exacts des fonctions.

    Si la DLL n'avait pas de .def, il �tait possible que les fonctions aient des noms d�cor�s que tu ne connaisses pas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    Bon, alors on va partir avec le .def, puique je ne peux pas vraiment recompiler la dll.

    Je reprends ce qui fut dit plus t�t :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef int (CALLBACK* NOMFCT)(int);
     
    HINSTANCE hClcltr=LoadLibrary("Mydll.dll");
    NOMFCT   lpfnfct;
    lpfnfct = (NOMFCT)GetProcAddress(hClcltr,"nomdelafonction");
     
    // pour utiliser la fct
     
    mavarderetour = lpfnfct(monint);
     
    FreeLibrary( hClcltr ); /liberer la lib
    Je reviens juste apr�s avoir essay�.[/code]

  20. #20
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Par d�faut
    c'est bon. J'utilise donc le .def, et �a marche.

    Merci pour toit

Discussions similaires

  1. Comment importer une DLL Win 32 en delphi.Net?
    Par Mickey.jet dans le forum Delphi .NET
    R�ponses: 2
    Dernier message: 21/08/2006, 10h33
  2. Comment importer une DLL dans du code???
    Par Jayceblaster dans le forum Delphi .NET
    R�ponses: 29
    Dernier message: 19/04/2006, 19h19
  3. Importer une DLL
    Par Sallie dans le forum MFC
    R�ponses: 8
    Dernier message: 14/04/2006, 10h47
  4. [NetBeans] importer une dll
    Par guitalca dans le forum NetBeans
    R�ponses: 1
    Dernier message: 16/12/2005, 11h13
  5. [FLASH MX2004] Importer une dll
    Par Fry dans le forum Flash
    R�ponses: 4
    Dernier message: 07/01/2005, 10h54

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