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

Windows Discussion :

Chargement Proc d'une DLL


Sujet :

Windows

  1. #1
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut Chargement Proc d'une DLL
    Bonjour,

    Je cherche à charger une DLL en Run-Time. Mais quoi qu'il arrive mon
    GetProcAddress me retourne ERROR_PROC_NOT_FOUND.

    Ma 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
    15
    #include <windows.h>
    
    
    __declspec(dllexport) void __stdcall funcTest(void);
    
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
        return 1;
    }
    
    
    void __stdcall funcTest ( void ) {
    	MessageBox(NULL, "Test de DLL", "Test", MB_ICONINFORMATION | MB_OK);
    }
    le code du main :

    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
    typedef void (__stdcall *TESTDDLFUNC) (void);
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
    
    	HMODULE hDLL;
    	if ( !(hDLL = LoadLibrary("smartSHA1.dll"))) {
    		exit(GetLastError());
    	}
    	TESTDDLFUNC test = (TESTDDLFUNC)GetProcAddress(hDLL, TEXT("funcTest"));
    	if ( test == NULL ) {
    		exit(GetLastError());
    	}
    
    	FreeLibrary(hDLL);
    
    }
    Je pense que je dois faire une erreur, mais je ne voi pas où...

    A votre bon coeur !

  2. #2
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    j'ai resolu moi même mon problème.
    c'était les __stdcall qui posais problème.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Si tu n'as pas de fichier .def, le nom exporté est généralement décoré:
    • En __cdecl, le nom décoré est "_funcTest". Mais bizarrement, on dirait que c'est le nom non-décoré qui est exporté.
    • En __stdcall, le nom décoré est "_funcTest@0" (parce que funcTest prend void en paramètre).
    • En __fastcall, le nom décoré est "@funcTest@0".

    Donc en théorie, tu pourrais remettre la foncitn en __stdcall et charcher "_funcTest@0" dans la DLL. La différence entre __stdcall et __cdecl, c'est une petite optimisation en taille. Et aussi, je crois que des langages comme VB utilisent du __stdcall par défaut.
    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.

  4. #4
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Hum mérci Médinoc,

    J'ai aussi trouvé l'utilitaire depends qui donne les infos sur les DLL.

    Par contre on peut exporter un objet dans une DLL ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Pour exporter un objet, ça devient du C++. Et là, c'est possible, mais non-portable (une DLL C++ MinGW ne sera pas utilisable avec une DLL C++ de Visual...)
    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.

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

Discussions similaires

  1. [D7] EConvertError lors du chargement dynamique d'une dll
    Par declencher dans le forum Langage
    Réponses: 3
    Dernier message: 11/02/2015, 13h52
  2. Réponses: 7
    Dernier message: 25/09/2013, 11h35
  3. Chargement multiple d'une DLL sur Tomcat
    Par luc.jamet dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 28/09/2010, 15h29
  4. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36

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