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 :

pb header lors de la compilation d'une dll


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 27
    Points
    27
    Par défaut pb header lors de la compilation d'une dll
    Bonjour,

    je compile sans soucis des dll en c mais j'ai un problème avec le point suivant.

    Tout d'abord mon environnement de développement:
    winXp, gcc 4.0.0_1
    J'intègre les dll que je développe à des programme c++ (avec Qt 4.6.2)

    Ci dessous le code minimal d'une dll qui export une fonction dispHello (qui affiche "hello")
    On trouve également la fonction DllMain appelée lorsque que l'on charge ou décharge la dll.

    Mon problème est le suivant: Si je veux appeler des fonctions dans DllMain, je suis obligé de les définir dans le même fichier que celui de DllMain. Si je déclare la fonction dans un .h et je la féfinis dans un autre fichier, le compilateur retournera un fonction undifined.

    La compilation du code ci-dessous provoque cette erreur avec la fonction test. Mais ça marche si je copie/colle la définition de test au-dessus de celle de DllMain.

    Qu'est ce qui ne va pas d'après vous?

    mainDll.h
    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
     
    #ifndef __MAIN_H__
    #define __MAIN_H__
     
    #include <stdio.h>
    #include <windows.h>
     
    /*  To use this exported function of dll, include this header
     *  in your project.
     */
     
    #ifdef BUILD_DLL
        #define DLL_EXPORT __declspec(dllexport)
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif
     
    void test(void);
     
    #ifdef __cplusplus
    extern "C"
    {
    #endif
     
    void DLL_EXPORT dispHello(void);
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif // __MAIN_H__
    main.c
    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
     
    #include "mainDll.h"
     
    // a sample exported function
    void DLL_EXPORT dispHello(void)
    {
        printf("Hello world\n");
    }
     
    extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
                // attach to process
                #ifdef DEBUG
                printf("DLL_PROCESS_ATTACH\n");
                #endif
                test();
                // return FALSE to fail DLL load
                break;
     
            case DLL_PROCESS_DETACH:
                // detach from process
                #ifdef DEBUG
                printf("DLL_PROCESS_DETACH\n");
                #endif
                break;
     
            case DLL_THREAD_ATTACH:
                // attach to thread
                #ifdef DEBUG
                printf("DLL_THREAD_ATTACH\n");
                #endif
                break;
     
            case DLL_THREAD_DETACH:
                // detach from thread
                #ifdef DEBUG
                printf("DLL_THREAD_DETACH\n");
                #endif
                break;
        }
        return TRUE; // succesful
    }
    test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "mainDll.h"
     
    void test(void)
    {
        printf("test");
    }

  2. #2
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Il ne manquerai pas un endif?
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 27
    Points
    27
    Par défaut
    Où ça?

  4. #4
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Il ne manque aucun #endif dans ton code.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2014, 16h38
  2. Pb de compilation lors de la création d'une DLL
    Par Annaced dans le forum Visual C++
    Réponses: 8
    Dernier message: 15/06/2010, 23h26
  3. pb lors de la compilation d'une appli web avec JOnAS
    Par crabinho dans le forum JOnAS
    Réponses: 1
    Dernier message: 20/03/2007, 12h05
  4. creer le *.dcu lors de la compilation d'une DLL ?
    Par Lorenzo77 dans le forum Delphi
    Réponses: 20
    Dernier message: 03/07/2006, 15h59
  5. Réponses: 11
    Dernier message: 15/11/2005, 08h04

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