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

Langage C++ Discussion :

Créer une DLL et l'exploiter


Sujet :

Langage C++

  1. #1
    Membre averti Avatar de tigzy
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2010
    Messages : 285
    Points : 365
    Points
    365
    Par défaut Créer une DLL et l'exploiter
    Bonjour,

    ça fait bien une heure que je galère

    J'ai créé une DLL, et je souhaite pour le moment faire un truc basique, à savoir afficher une messageBox sur appel du processus qui la rattache.

    voici les sources:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // dllmain.cpp : Définit le point d'entrée pour l'application DLL.
    #include "stdafx.h"
     
    extern "C" __declspec(dllexport) int WINAPI SayHello();
     
    BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
    {
    	switch (ul_reason_for_call)
    	{
    		case DLL_PROCESS_ATTACH:
    			SayHello();
    		case DLL_THREAD_ATTACH:
    		case DLL_THREAD_DETACH:
    		case DLL_PROCESS_DETACH:
    			break;
    	}
    	return TRUE;
    }
     
     
    extern "C" {        
     
    	__declspec(dllexport) int WINAPI SayHello()
    	{    
    		MessageBox(NULL, L"Hello", L"DLL_Hello", MB_OK);
    		return 0;
    	}
     
    }

    Programme de test:


    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
    // test.cpp*: définit le point d'entrée pour l'application.
    //
    #include "stdafx.h"
    #include "test.h"
    #define DLL_NAME TEXT("Hook.dll")
     
    typedef int (WINAPI *PHookSayHello)(void);
     
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
    	HMODULE hDll = LoadLibrary(DLL_NAME);
     
    	PHookSayHello pHook; 
    	FARPROC fp = GetProcAddress(hDll, "SayHello");
            pHook = (PHookSayHello) fp;
            if(NULL != pHook) 
    		pHook();
    	else 
    		printf ("Not found\n");
     
    	FreeLibrary(hDll);
    	return 0;
    }

    Le problème est le suivant:

    Au chargement de la DLL, j'ai bien ma MessageBox (la DLL est correctement chargée) , mais le GetProcAdress me retourne toujours 0, comme si la fonction n'existait pas...
    Quelqu'un saurait pourquoi?
    Développeur de RogueKiller

  2. #2
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Je ne vois pas de différence avec mon code (qui marche) pourtant :s

  3. #3
    Membre averti Avatar de tigzy
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2010
    Messages : 285
    Points : 365
    Points
    365
    Par défaut
    Hello

    J'ai trouvé la solution

    Visiblement il ne faut pas déclarer comme type WINAPI, je pense que ce mot clé est utilisé par les API windows seulement.

    En enlevant juste ça, ça marche
    Développeur de RogueKiller

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

Discussions similaires

  1. Comment créer une dll à parti d'un programme en C
    Par laetous dans le forum Windows
    Réponses: 5
    Dernier message: 02/09/2006, 11h05
  2. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 14h32
  3. Comment (ou peut on) créer une DLL .NET ?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 02/04/2006, 15h54
  4. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38
  5. [MFC]Créer une DLL BIS
    Par Furtif_00 dans le forum MFC
    Réponses: 5
    Dernier message: 28/06/2004, 14h48

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