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 :

Libraries windows (__cdecl, __stdcall, __declspec(dllexport), __declspec(dllimport))


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut Libraries windows (__cdecl, __stdcall, __declspec(dllexport), __declspec(dllimport))
    Bonjour,

    je suis en train de développer des libraires pour windows (et linux), mais je me suis rendu compte que sous windows (MVC et MinGW) je dois utiliser les commande suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #if (defined WIN32 || defined WIN64 || defined _WIN64)
        #define X7S_CDECL __cdecl
        #define X7S_STDCALL __stdcall
        #define X7S_EXPORT __declspec(dllexport)
        #define X7S_IMPORT __declspec(dllimport) 
    #else
        #define X7S_EXPORT
        #define X7S_CDECL
        #define X7S_STDCALL
        #define X7S_IMPORT
    #endif

    Le seul problème c'est que j'ai vu différente implémentation sur le net et je n'ai pas tres bien compris les différences entre ces dernieres.

    D'apres le tutoriel de http://www.codeguru.com/cpp/cpp/cpp_...icle.php/c9855
    et la FAQ c++ http://cpp.developpez.com/faq/vc/?page=DLL#MakeDynDll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef DLL_EXPORTS
       #define X7S_DECLSPEC X7S_EXPORT
    #else 
       #define X7S_DECLSPEC X7S_IMPORT
    #endif
    alors que dans la libraries de OpenCV ils utilisent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifndef CVAPI
        #define CVAPI(rettype) CV_EXPORTS rettype CV_CDECL
    #endif
    je suis pas sur de comprendre la différence entre chacune et ne trouve pas de bon tutoriel sur le sujet.

    ----

    Autre questions:

    • je viens de me rendre compte que je n'utilise jamais DLL_IMPORT et pourtant mon projet marche bien. pourquoi?
    • A quoi serve X7S_CDECL et X7S_STDCALL ?
    • MinGW a l'air aussi d'avoir besoin de ces commandes.
    • Il faut utiliser X7S_DECLSPEC seulement pour les class et les functions que l'on utilise en dehors, ou il y a t'il d'autre cas ?

  2. #2
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Le plus simple si tu utilise le compilo Microsoft Visual Studio, est de linker avec un fichier .def (Le rajout de définition est automatiquement fait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    link.exe [...] /def:fichier.def
    Exemple fichier def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXPORTS	
    	Function1
    	Function2
    Voir aussi http://wyw.dcweb.cn/stdcall.htm

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut
    Nan je n'utilise pas vraiment visual studio.
    Je développe avec cmake et j'aimerais devoir le moins possible modifier le projet mais juste le code.

    merci pour l'URL ca m'a bien aidé.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Pour la première ligne c'est pas plutôt ça que tu veux :
    ?

    Cf. http://predef.sourceforge.net/precomp.html#sec34

    MAT.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut
    nan car MinGW a aussi besoin de l'entete!

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Ah pardon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if defined __MINGW32__ || defined _MSV_VER
    MAT.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/11/2008, 09h49
  2. static et __declspec(dllexport)
    Par squale69 dans le forum Visual C++
    Réponses: 2
    Dernier message: 16/05/2008, 00h01
  3. template et __declspec(dllexport)
    Par mister3957 dans le forum Langage
    Réponses: 15
    Dernier message: 14/03/2008, 08h45
  4. template et __declspec(dllexport) : LNK2019
    Par mister3957 dans le forum Langage
    Réponses: 14
    Dernier message: 04/01/2008, 10h43
  5. __declspec(dllexport) dans mon fichier header mais...?
    Par Jasmine dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/03/2004, 18h00

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