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 C++ - Code portable


Sujet :

C++

  1. #1
    Membre éclairé Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut DLL C++ - Code portable
    Bonjour,

    Y a t'il une manière standard, donc non liée à un systéme / IDE, pour exporter / importer des fonctions (pas besoin de classes) à partir de Dll (ou .so ou autre) de manière dynamique.

    Merci

    PS : il y a une suite mais j'attend déja la réponce à cette question.

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    A ma connaissance Non.

    Faire une librairie dynamique pour Windows ou Linux n'est pas la même chose.

  3. #3
    Membre éclairé Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Merci

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,
    Citation Envoyé par Bayard Voir le message
    A ma connaissance Non.

    Faire une librairie dynamique pour Windows ou Linux n'est pas la même chose.
    Hé bien, justement, si... une bibliothèque dynamique reste fort semblable qu'elle soit sous windows ou sous linux.

    Ce qu'il y a surtout, c'est qu'il faut être attentif au bibliothèques utilisées pour créer la tienne.

    Pour les cas particuliers qui sont dépendants d'un OS, d'une plateforme ou d'un compilateur, tu pourra assurer la compatibilité avec de simples directives préprocesseur.

    Ainsi, tu peux te baser sur le code source de boost, et, principalement sur les informations trouvées dans boost\config\select_plateform_config.hpp et boost\config\select_compiler_config.hpp pour savoir quelles directives utiliser.

    En gros, quand tu arrive à une portion de code "plateforme dépendante", tu peux très bien t'en sortir avec un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #if defined(linux) || defined(__linux) || defined(__linux__)
     
    /* le code utile sous linux */
     
    #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
     
    /* le code utile sous windows */
     
    #endif
    voire, assurer la compatibilité mingw/VC/Borland avec un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #if defined __GNUC__
     
    /* utilise GCC */
     
    #elif defined __BORLANDC__
     
    /* Utilise le compilateur Borland */
     
    #elif defined _MSC_VER
     
    /* utilise le compilateur Visual C++
     
    #endif
    Au final, tu peux donc envisager d'exporter tes fonctions correctement grâce à un simple code du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #if defined DLL_EXPORT
    /* partie pour la création de la DLL */
        #define MYEXPORT __declspec(dllexport)
    #else
    /* partie pour l'importation de la DLL */
        #define MYEXPORT __declspec(dllimport)
    #endif
    (peut etre à adapter pour que cela fonctionne sous linux )
    et déclarer tes fonctions sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MYEXPORT MaFonction(/*...*/)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éclairé Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Merci, justement mon code ne fait pas appel a beaucoups de fonctions externed, que des truc bases.

    Ton code va surement m'aider.

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

Discussions similaires

  1. Création de .dll sous code::bocks
    Par AMS010 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 29/04/2009, 16h03
  2. créer DLL à partir code en VC++ (fichiers .h)
    Par punto dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 21/03/2008, 17h45
  3. Utilisation de 'cout' et code portable ??
    Par LaVaZza dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/12/2005, 19h05
  4. Code portable pour ping
    Par SteelBox dans le forum C
    Réponses: 4
    Dernier message: 03/11/2005, 22h56
  5. Code Portable
    Par D[r]eadLock dans le forum C
    Réponses: 9
    Dernier message: 14/09/2002, 13h44

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