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

Qt Discussion :

Appeler une DLL à partir d'un programme Qt


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut Appeler une DLL à partir d'un programme Qt
    Bonjour, ben j'ai commencé à comprendre petit à petit comment doit marcher mon programme que je veux interfacer avec ma DLL.
    J'ai fais un bout de code que j'ai essayé je pense que la DLL est chargé mais je sais pas comment appeler les fonctions se trouvant dans ma DLL et aussi j'ai un "point.h" qui contient les prototypes des fonctions de la DLL je sais pas si je dois m'en servir??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int maclass::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype myFunction = (MyPrototype) myLib.load() ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (myFunction)
         myFunction();
     qDebug() << "DLL success load" ;
    //Voici la fonction se trouvant dans la DLL et dont je voudrais appleler!
    //RegisterEventCallback( eventCallback_t eventCallbackProc, void* customData = NULL );
     
    }


    Merci d'avance de votre aide.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Utilise qresolve.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour, j'ai utilisé resolve mais je pense que ma DLL est chargée mais je sais pas comment appeler les fonctions qui s'y trouvent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int DManual2::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype myFunction = (MyPrototype) myLib.load() ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (myFunction)
         myFunction();
     qDebug() << "DLL success load" ;
     
     
    }
    en sortie j'ai DLL success load mais je sais pas vraiment si elle est chargé??
    Voici la fonction que je veux appeler dans mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    {
    	return OK;
    }
    Je sais pas si je dois mettre le prototype de la fonction dans mon code où j'appelle la dll??
    J'ai besoin de votre help please.
    merci d'avance.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  5. #5
    Membre actif Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Points : 273
    Points
    273
    Par défaut
    "Qt fournit la classe QLibrary..."

    Il va falloir passer par des fonctions en C avec QLibrary, ou utiliser la macro EXPORT_C, ou un truc du genre.

    Tu peux regarder aussi du côté du QPluginLoader, ce dont je me suis servis, tu récupère une liste de QObject, correspondants aux classes contenues dans ta dll. Maintenant, il faut bien sûr que ta dll contienne des QObject.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par cayou66 Voir le message
    "Qt fournit la classe QLibrary..."

    Il va falloir passer par des fonctions en C avec QLibrary, ou utiliser la macro EXPORT_C, ou un truc du genre.

    Tu peux regarder aussi du côté du QPluginLoader, ce dont je me suis servis, tu récupère une liste de QObject, correspondants aux classes contenues dans ta dll. Maintenant, il faut bien sûr que ta dll contienne des QObject.
    Dans ma dll j'ai pas de classe , j'ai uniquement des methodes en c++ comme une fonction qui return OK quand elle est appelée du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    {
    	return OK;
    }

    Merci Yan pour le tuto il ma permi de mieux comprendre , voici ce que j'ai fait mais ça me retourne false??
    Et aussi j'ai un ".h " avec ma dll je sais pas si je dois l'inclure par un #include:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int maClas::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype RegisterEventCallback = (MyPrototype) myLib.resolve("RegisterEventCallback") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (RegisterEventCallback)
         RegisterEventCallback();
     qDebug() << "DLL success load" << "The value of the function is" << RegisterEventCallback;
     
     
    }
    J'ai false en sortie au lieu de OK??Peut etre que ma dll n'est pas chargé??
    I need help!please

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Elle est chargée, mais TES FONCTIONS DOIVENT ETRE EXPORTEES AVEC EXTERN "C".

    C'est pourtant pas faute de te l'avoir indiqué dans la FAQ et dans les messages précédents !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Elle est chargée, mais TES FONCTIONS DOIVENT ETRE EXPORTEES AVEC EXTERN "C".

    C'est pourtant pas faute de te l'avoir indiqué dans la FAQ et dans les messages précédents !
    Mes fonctions sont bien exportées avec EXTERN"C" dans le fichier .h de la DLL , je pense que je dois faire un Link du .h??
    Je sais pas avec quelle commande il faut le faire?J'ai mis #include; mais c'est pas bon!!
    Si je resume mon code c'est ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int maClass::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;//Je charge la dll
     
       typedef int (*RegisterEventCallback);//Je fais un pointeur sur le prototype de la fonction à appeler
       RegisterEventCallback myFunction = (RegisterEventCallback) myLib.resolve("RegisterEventCallback") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (myFunction) //Si la fonction est trouvée => l'executer
         myFunction;
     qDebug() << "DLL success load" << The function return" << myFunction ;
    //RegisterEventCallback( eventCallback_t eventCallbackProc, void* customData = NULL );
     
    }
    une protion du .h de la dll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extern "C" {
    #endif
     
    int RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    {
    	return OK;
    }
    Donc les fonctions sont bien extern!Je sais pas comment inclure le .h apres avoir chargé la dll

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il y a une différence entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (*RegisterEventCallback)
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int *RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    De plus, tu as deux fois le même nom pour deux objets différents.

    Et :
    N'est pas un appel de fonction.

    Tu en dois surtout pas inclure ton header dans ton programme, il ne sert que pour les chargements statiques.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour, je reviens encore envers vous car peut etre ya quelque chose qui m'échappe! je suis à mon deuxieme jour sur ce sujet ça commence à m'inquiéter vraiment.Je fournit et j'explique mon code ligne par ligne si quelqu'un peut me dire là où ça cloche svp et ce que j'ai pas pigé pour que je puisse clore ce sujet svp
    merci d'avance!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*création d un objet QLibrary lié à ma dll et filename est le nom de ma dll' */
     
     QLibrary myLib(filename) ;
    /*Creation d un pointeur MyPrototype sur les parametres de la fonction que je veux appeler*/
      typedef  int *MyPrototype(eventCallback_t eventCallbackProc, void* customData = NULL);
     
    /*Recherche du prototype de la fonction à appeler, je pointe sur le prototype et je recherche dans la dll par la methode resolve*/
      MyPrototype RegisterEventCallback  = (RegisterEventCallback) myLib.resolve( "RegisterEventCallback") ;/*J'appelle toutes les fonctions existant dans ma DLL.*/
    /*Si la fonction s'y trouve, alors on fait un appel:*/
     if (RegisterEventCallback)
         RegisterEventCallback() ;
     
     qDebug() << "DLL success load" << "The function return : " << PIXDYN_RegisterEventCallback ;
    Franchement c'est que que j'ai compris avec tout ce que j'ai lu et ce que vous m'avez explique, si quelqu'un peut me permetrre d'avancer je suis preneur car la c'est deprimant

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  int *MyPrototype(eventCallback_t eventCallbackProc, void* customData = NULL);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  int *MyPrototype(eventCallback_t , void* );

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Et c'est quoi ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if (PIXDYN_RegisterEventCallback)
         PIXDYN_RegisterEventCallback()
    Ton callback ? Il ets déclaré où ? Et pourquoi tu ne l'appelles pas avec les bons arguments ?

    Donne-nous un code qui compile, pas un code où il faut que se pose la question "est-ce que c'est ça ou c'est une erreur de recopie ?". Un code simple élémentaire, où ton problème se reproduit. Un indice : plus de 10 lignes, on ne regardera pas.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour , je reviens avec le meme probleme toujours pas resolu.En fait c'est une portion de mon ihm et le code compilable
    fait plus de 10 lignes donc dsl de ne pouvoir fournir que la partie de la dll.

    Voici où j'en suis là je veux appeler cette fonction qui se trouve dans ma dll:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     error_status ChangeIpAdress()
    {
            return ERR_UNKNOWN;
    }
    sachant que dans dans le point.h que j'ai inclus j'ai ceci:
     
    typedef enum {
                 ERR_UNKNOWN = GENERAL_ERROR + 1
                 } error_status;
    Voici ma methode d'appel de la dll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int Maclass::LoadDLL(QString filename)
    {
        QLibrary myLib(filename) ;//creéation d'un objet QLibrary lié à ma dll
     
       typedef void* ChangeIpAdress;
     
       ChangeIpAdress MyFunction = (ChangeIpAdress) myLib.resolve( "ChangeIpAdress") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (MyFunction)
         MyFunction ;
     
     qDebug() << "DLL success load" << "The function return : " << MyFunction ;
     
     
    }
    Quand je compile y'a pas d'erreur mais ça me retourne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DLL success load The function return :  0x0
    c'est pas bon, c'est pas ce que dois returner la fonction.Si quelqu'un peut me dire là où ça cloche??
    Merci d'avance!

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Bon, je me répète...
    Tu n'appelles même pas la fonction, commence par l'appeler, et quand tu arriveras à extraire la fonction de la DLL, tu auras des chances pour que ça marche.

    Ensuite, donne nous un code minimaliste compilable. C'est largement faisable de fournir une fonction vide (en-tête + code source) pour faire ta DLL et de créer un chargeur minimaliste qui reproduit l'erreur. Ne dis pas que ça prend plus de 10 lignes, c'est faux.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Je comprends pas trop ta demande qu'est ce que tu veux?La DLL en tant que telle ?ou mon code source compilable? ça m'empechera pas qu'à meme de poster mon code et je pense pas que cette fois ci que ça soit lié à un probléme d'appel de fonctio car je pense que j'ai bien compris ce qu'il faut faire mais je trouve pas mon bogue!!
    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int Maclass::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;//creéation d'un objet QLibrary lié à ma dll
     
       typedef error_status (*PointFunction)();//Pointeur du meme type que ma fonction.
     
       PointFunction ChangeIpAdress = (PointFunction) myLib.resolve( "ChangeIpAdress") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (ChangeIpAdress)
        ChangeIpAdress() ;
     
     
     qDebug() << "DLL success load" << "The function return : " << ChangeIpAdress() ;
    et voici le bogue cette fois ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    No such file or directory
    Cannot access memory at address 0*0

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Non, mais c'est normal, l'erreur ! Tu exécutes la fonction. Sauvegarde le retour de la fonction, et voilà !

    Maintenant, si tu nous donnais enfin le code minimal de ta DLL (en-tête et code, mais je me répète un peu trop, là) et le code de ton programme pour qu'on puisse analyser la version MINIMALE qui reproduit le problème, on pourra t'aider.
    Là, il manque tellement d'information que ça pourrait être n'importe quoi. Fais un effort, et on pourra t'aider.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Non, mais c'est normal, l'erreur ! Tu exécutes la fonction. Sauvegarde le retour de la fonction, et voilà !

    Si c'est ça le probléme j'aimerais bien que tu me dise comment Sauvegarder le retour de la fonction. Je mets en fichers joins les .h et .cpp de la dll et voici mon code.
    PS: La dll que je dispose à l'extension.dll alors que je travaille sous Linux??? est ce un probléme ??car je pense qu'il me faut bien un .so
    Merci d'avance j'espere que les infos complementaire que j'ai fourni nous aiderons enfin à cloturer ce thread.Encore merci


    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
    void Maclass::LoadDLL()
    {
     
        QLibrary myLib("maDLL") ;//creéation d'un objet QLibrary lié à ma dll
     
     
       typede error_status (*PointFunction)();//Pointeur sur ma fonction.
     
       PointFunction ChangeIpAdress = (PointFunction) myLib.resolve( "ChangeIpAdress") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (ChangeIpAdress)
     
       ChangeIpAdress() ;
     
     
     qDebug() << "DLL success load" << "The function return : " << ChangeIpAdress ;

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (ChangeIpAdress)
    mon_resultat_que_je_veux_sauvegarder_parceèqu_il_faut_bien_le_faire_quand_j_execute_ma_fonction = ChangeIpAdress() ;
    Ensuite, il faut tout de même exporter la fonction. Tu as le début, mais tu n'as pas dû lire la fin du tutoriel à ce sujet !
    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
    #ifndef dll_H
    #define dll_H
     
    #if defined(WIN32)
    	#if defined(dll_EXPORTS)
    		#define export_mydll dll__declspec(dllexport)
    	#else
    		#define export_mydll dll__declspec(dllimport)
    	#endif
    #endif
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
     
    typedef enum {
     
    	GENERAL_ERROR = 0,
    		ERR_UNKNOWN = GENERAL_ERROR + 1,
    } error_status;
     
     
    export_mydll error_status GetModeStatus();
     
    export_mydll error_status ChangeIpAdress();
     
    export_mydll error_status GetSystemConfig(  );
     
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif //dll_H
    La preuve qu'il faut tous les éléments et non pas juste un morceau. Ton erreur était, et je m'en doutais, dans la déclaration de ta bibliothèque.

    N'oublie pas de définir WIN32 et dll_EXPORTS...

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    La preuve qu'il faut tous les éléments et non pas juste un morceau. Ton erreur était, et je m'en doutais, dans la déclaration de ta bibliothèque.

    N'oublie pas de définir WIN32 et dll_EXPORTS...
    Tu peux expliquer un peu plus stp car la bibliotheque a ete teste avant que je l'utilise!!Donc ça m'etonne que l'erreur si retrouve???

    Et une question tres imporatnte pour moi:est ce que ce ".dll" je peux l'utiliser sous lunix??


    Citation Envoyé par Matthieu Brucher Voir le message
    mon_resultat_que_je_veux_sauvegarder_parceèqu_il_faut_bien_le_faire_quand_j_execute_ma_fonction = ChangeIpAdress() ;...
    et c'est quoi le type de la variable de retour???mon_resultat_que_je_veux_sauvegarder_parceèqu_il_faut_bien_le_faire_quand_j_execute_ma_fonction

    Si tu peux me donner plus d'explicatio stp car apparemment tu as vu la solution mais moi je reste tjs au point mort
    Merci d'avance;

  20. #20
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ben non, un .dll, c'est du Windows, pas du Linux, c'est pas du tout compatible
    Je me suis dit que c'était du Windows, puisque tu parlais de DLL.

    Et c'est toi qui connais le code retour de ta fonction, puisque c'est toi qui la définis et c'est toi qui a déclaré le prototype avec ton typedef.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JNI] Appeler une DLL Fortran à partir de Java
    Par Graffity dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/11/2008, 00h07
  2. Réponses: 2
    Dernier message: 13/02/2008, 16h36
  3. Appeler une DLL à partir de MATLAB
    Par swap_nibble dans le forum MATLAB
    Réponses: 0
    Dernier message: 06/02/2008, 12h06
  4. Réponses: 12
    Dernier message: 23/05/2007, 21h40
  5. Appel d'une dll (c++) dans un programme c++
    Par cout dans le forum C++
    Réponses: 2
    Dernier message: 01/06/2006, 14h52

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