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] Jamais chargée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [DLL] Jamais chargée
    Bonjour à tous !

    Je viens solliciter votre aide car j'ai un soucis dans la création d'une DLL, et je n'ai trouvé aucun problème de ce genre sur google =/
    En gros j'aimerais créer une DLL que je fais charger par un programme (taskmgr.exe) afin de lui rajouter des fonctionnalitées (le but profond c'est de m'initier à la création d'extensions).
    Pour ce qui est de faire charger la DLL par ce programme, c'est OK. (Elle m'affiche bien une petite MessageBox ). Mais une fois que je rajoute un peu de code dans cette même DLL, elle n'est plus du tout chargée par le programme.

    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
    48
    49
    #include "main.h"
     
    extern "C"
     
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
     
                MessageBox(0, "Loaded", "Dll message", MB_OK);
                MyProc();
                return TRUE;
                break;
     
            case DLL_PROCESS_DETACH:
                // detach from process
                break;
     
            case DLL_THREAD_ATTACH:
                // attach to thread
                break;
     
            case DLL_THREAD_DETACH:
                // detach from thread
                break;
        }
        return TRUE; // succesful
    }
     
    void DLL_EXPORT MyProc()
    {
     
        MessageBox(0, "In MyProc", "Dll message", MB_OK);
        // Si je mets le code suivant en commantaire, la DLL est correctement executée
        HWND hHostWnd;
        hHostWnd = GetTopWindow(0 );  // On récupère la 1ere fenettre
                DWORD pid;                    // Variable pour les tests
                while ( hHostWnd )
                {
                    GetWindowThreadProcessId( hHostWnd,&pid);     // On obtient le pid de la fenettre
                    if ( pid == GetCurrentProcessId() )           // Si celui ci est celui de notre processus
                        {
                            MessageBox(0, "Found host HWND !", "Info", 0);
                            SetForegroundWindow(hHostWnd);
                    }
                    hHostWnd = GetNextWindow( hHostWnd , GW_HWNDNEXT);  // Sinon on prend la fenettre suivante
                }
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Problème résolu en rajoutant une variable d'environnement vers le répertoire "bin" de mon dossier MinGW64, mais pour bien comprendre, c'est parceque j'utilise un compilo en 64bits qui possède ces propres dll que j'ai eu ce soucis ? Car j'utilise des fonctions Windows donc je vois pas trop pourquoi il faut que je précise l'emplacement des dll.

    En fait pour m'en rendre compte j'ai simplement créé un executable qui chargait ma dll, et quand je le compilais avec MinGW64 j'avais un joli méssage d'erreur "dll introuvable..." (truc du genre), et quand je compilais avec MinGW tout fonctionnait niquel.

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    salut je ne comprends pas ce que tu veux faire au final...
    pour charger une bibliothèque de code dynamique une dll on la charge avec LoadLibrary dans le programme appelant la dll

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Oui en effet j'ai justement fais un appel a LoadLibrary dans un programme que j'ai fais afin de trouver l'erreure, car je ne peux pas modifier le code source de taskmgr directement.
    Mais concrétement ce que je veux faire : taskmgr (le gestionnaire de processus windows) charge ma DLL, et celle ci modifie la fenettre de taskmgr afin de lui rajouter des fonctionnalitées (listage des modules chargés, etc...). Je sais bien que des programmes le font, mais le but c'est apprendre.
    Donc j'ai enfin réussi mais j'ai des points qui me tracassent (lire mon 2eme post).

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Comment te débrouilles-tu pour que taskmgr charge la DLL?
    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.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ouvre le processus et j'y créé un thread qui pointe sur loadlibrary.

    Je me suis donc rendu compte que mon soucis venait de MinGW64 qui link sur des dll qui lui sont propres (je pense pour ce dernier point) : libstdc++ en 64 bits. J'en profite pour vous demander si quelqu'un connait un autre compilo que MinGW64 pour du 64 bits. MSVC++ mais c'est payant =/ ?

Discussions similaires

  1. Retrouver les dll que charge un programme ?
    Par barbuslex dans le forum Windows
    Réponses: 2
    Dernier message: 23/03/2009, 18h59
  2. xml jamais chargé (event.COMPLETE) ?
    Par 187bundy dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 27/02/2009, 13h02
  3. DLL ne charge pas les librairies
    Par mercure07 dans le forum Qt
    Réponses: 3
    Dernier message: 10/07/2008, 09h20
  4. dll qui charge une autre dll
    Par simoryl dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/09/2007, 17h23
  5. DLL Borland chargée par Windows: crash
    Par bocher dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/01/2004, 12h09

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