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 :

dll : �chec d'export


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 39
    Par d�faut dll : �chec d'export
    Bonjour � tous,

    Voil� quelques jours que je me suis lanc� dans l'apprentissage de cr�ation de dll en C++(pour info j'utilise VS2008).
    En suivant ce tutoriel j'obtiens le code suivant :

    Fichier Header

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // MathFuncsDll.h
    // fonctions effectuant les operations de base
     
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // effectue a + b
            static __declspec(dllexport) double MyFunc(double a, double b);
     
        };
    }
    Fichier Source

    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
    // MathFuncsDll.cpp
    // compiler avec: /EHsc /LD
     
    #include "MathFuncsDll.h"
     
    #include <stdexcept>
     
    using namespace std;
     
    namespace MathFuncs
    {
        double MyMathFuncs::MyFunc(double a, double b)
        {
            return a + b;
        }
    }
    Ce qui, lorsque je compile, me donne un MyFuncDLL.dll. Jusque l� tout semble aller comme je veux...

    Mais ce n'est pas le cas , car lorsque je tente d'exploiter ma fonction via cette dll � l'aide de :

    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
    #include <windows.h>
    #include <stdio.h>
     
    // DLL function signature
    typedef double (*importFunction)(double, double);
     
    int main(int argc, char **argv)
    {
            importFunction MyFunc;
            double result;
     
            // Load DLL file
            HINSTANCE hinstLib = LoadLibrary(TEXT("MyFuncDLL.dll"));
            if (hinstLib == NULL) {
                    printf("ERROR: unable to load DLL\n");
     
            }
    		else { 
                    printf("DLL loaded\n");
     
    		}
            // Get function pointer
            MyFunc = (importFunction)GetProcAddress(hinstLib, "MyFunc");
            if (MyFunc == NULL) {
                    printf("ERROR: unable to find DLL function\n");
                    FreeLibrary(hinstLib);
     
            }
    		else { 
                    printf("function found\n");
     
    		} 
            // Call function.
            result = MyFunc(1, 2);
     
            // Unload DLL file
            FreeLibrary(hinstLib);
     
            // Display result
            printf("The result was: %f\n", result);
     
    		getchar();
            return 0;
    }


    J'obtiens bien le "DLL loaded" mais j'ai ensuite l'erreur "ERROR: unable to find DLL function" !

    Si quelqu'un(e) pouvait m'expliquer o� se trouve mon erreur, �a m'enl�verait une fi�re chandelle du pied

    Merci d'avance pour vos conseils !!

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,
    Les noms des symboles C++ sont tous "d�cor�s"; comme il n'y a pour l'instant pas de convention standard, ces d�coration d�pendent entierement du compilateur. Le meilleur moyen d'obtenir ce nom "d�cor�" est de faire dumpbin.exe /SYMBOLS malib.lib et de chercher un symbole contenant MyFunc, MyMathFuncs et MathFuncs.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 39
    Par d�faut
    Merci pour ton aide, mais �tant vraiment tr�s peu exp�riment� j'ai du mal � te suivre.

    La ligne de commande que tu �voques se lance bien � partir du terminal de VS ?
    Lorsque je fais cela, je re�ois un message d'erreur command "dumpbin.exe" is not valid

    Que faire ?

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    en general on utilise les methodes a signature C lorsqu'on exporte d'une DLL, pour pouvoir importer a la main (avec le nom de la methode)

    c'est a dire

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    __declspec(dllexport) extern "C" double MyFunc(double a, double b);
    on ne peut plus mettre cette methode dans une classe.

Discussions similaires

  1. R�ponses: 40
    Dernier message: 21/06/2007, 17h58
  2. R�ponses: 8
    Dernier message: 22/12/2004, 22h57
  3. [CR] Dll ou format d'exportation incorrect
    Par Drahu dans le forum SAP Crystal Reports
    R�ponses: 3
    Dernier message: 07/10/2004, 09h11
  4. R�ponses: 4
    Dernier message: 01/07/2004, 11h53
  5. R�ponses: 4
    Dernier message: 07/12/2002, 07h34

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