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 :

Fonctions exposées / masquées d'une DLL


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 74
    Par défaut Fonctions exposées / masquées d'une DLL
    Bonjour a tous,


    Quelques précisions tout d'abord :
    - Environement de Dev. : NetBeans / MinGw

    Problème :

    J'ai un code source de programme en C, je l'ai transformé à minima en DLL (Projet C/C++ DLL dynamique).

    Je fais un test :
    Quand je compile le tout, j'obtiens bien ma DLL, mais le problème c'est que celle-ci exporte toute un tas de fonctions alors que d'apres ce que je sais par défaut toute les fonctions sont par défaut cachées.

    J'ai essayer de forcer soit C uniquement soit C++ mais rien a faire même résultat.

    Je sais creer des dll sous win, ce code tout bete exporte bien ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    __declspec(dllexport) int somme(int a,int b){
        return a+b;
    }
    et ce code la masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int somme(int a,int b){
        return a+b;
    }
    Dans le programme en C dont j'ai les source , il n'y aucun "__declspec(dllexport) ", Alors comment cela se fait-il que les fonctions soit exportée ????

    Ce même programme par ailleurs avec un "main()" me fait un "exe" correcte.

    Quelque chose m'échappe..... quelqu'un pour m'éclairer ?

    Merci par avance .

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    la portée est décidée par le mot-clé static

    Toute fonction ou variable déclarée static ne sera visible que dans le module spécifié, donc dans ton cas uniquement dans la DLL..

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 74
    Par défaut Difference compilation Netbeans + MinGw / Vstudio 2005
    Citation Envoyé par souviron34 Voir le message
    la portée est décidée par le mot-clé static

    Toute fonction ou variable déclarée static ne sera visible que dans le module spécifié, donc dans ton cas uniquement dans la DLL..
    Merci de ta réponse souviron34,

    mais je suis au courant pour le "static", j'ai de plus relu le tuto fait par notre camarade "Melem" (http://melem.developpez.com/tutoriel...ation-separee/)

    J'ai fait un autre test, j'ai compilé avec Visual studio 2005 et la mes fonctions C de la DLL ne sont plus exposées... il n'y pourtant nulle-part de mot clé static dans mes sources C composant la DLL et pourtant quand Vs2005 compile je n'ai aucune fonctions exposées, ce qui est normal au final puisque par défaut toutes les fonctions d'une DLL sont privées...

    Je me demande donc toujours :
    pourquoi quand je compile avec Netbeans / MinGw toutes les fonctions sont visibles par defaut alors même qu'il n'y a aucun "dllexport"...

  4. #4
    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
    J'ignore quelle tambouille gcc fait pour son équivalent des DLLs.

    Mais sous Visual, il y a deux façons d'exporter une fonction: dllexport et le fichier .def. Il est recommandé d'utiliser le second, mais il est quand même recommandé d'utiliser dllimport pour les programmes utilisateurs (ça optimise).
    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.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et j'ajouterais qu'il est recommandé, pour les fonctions que l'on veut absolument internes, de les mettre static..

    Car alors la question ne se pose même plus

Discussions similaires

  1. appel d'une fonction utilisant Opencv depuis une dll c++
    Par manoulaisamm dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 06/03/2014, 13h43
  2. Appel d'une fonction global à partir d'une DLL
    Par JeanNoel53 dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/12/2010, 14h24
  3. recuperer une fonction avec arguments dans une dll
    Par freuh94 dans le forum Windows
    Réponses: 3
    Dernier message: 03/10/2009, 11h45
  4. Exporter et utiliser des fonction c à partir d'une dll
    Par alaeddine1983 dans le forum Windows
    Réponses: 10
    Dernier message: 10/07/2009, 12h12
  5. [VB6] Ajouter un commentaire à une fonction d'une DLL
    Par Ace303 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/06/2003, 08h14

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