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 :

Macro conditionelle? Import/Export de symboles.


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut Macro conditionelle? Import/Export de symboles.
    Le titre est un peu abstrait mais comme je ne suis pas sp�cialiste des macro je ne suis pas sur de comment proc�der.

    Je voudrais savoir si il y a un moyen d'�crire une fonction macro prenant un paramettre qui sera utilis� pour g�n�rer un nom de macro et d�finir la valeur d'une autre d�finition macro.

    Quelque chose qui ressemblerait � �a (sauf que ce code ci n'a pas le sens que je veux):


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #define GENERATE_MODULE_API( module_api_macro_name ) \
    	#ifdef module_api_macro_name##_EXPORTS \
    		#define module_api_macro_name##_API My_DllExport \
    	#else \
    		#define module_api_macro_name##_API My_DllImport \
    	#endif
    Je ne vois pas de fa�ons de le faire.

    Ce que j'aimerai faire c'est que chacun de mes projets DLL/SO puisse automatiquement g�n�rer une macro MON_MODULE_API qui serait l'�quivalent de ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    #ifdef MONPROJET_SYSTEM_EXPORTS
    #define MONPROJET_SYSTEM_API My_DllExport
    #else
    #define MONPROJET_SYSTEM_API My_DllImport
    #endif
     
    #endif
    Actuellement je dois faire un header par projet qui doit contenir ce code ci dessus (avec le nom du projet chang� � chaque fois).

    Si vous avez une mani�re de le faire plus g�n�rique, je suis preneur.

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    A ma connaissance, tel quel, cela ne marche pas. Le preprocessing se fait en un seule passe.
    Une solution : un template de header/une macro de ton IDE, etc... (bref une solution hors langage).

  3. #3
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Et, d'ailleurs, c'est assez malheureux. (que �a ne soit pas possible)
    Sinon, �a permettrait moultes simplifications !

  4. #4
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Ok je voulais juste �tre sur parceque je me souviens �tre arriv� � la m�me conclusion auparavant, mais peut �tre que des outils dans Boost ou autre auraient pu aider...

    Bon ben c'est reparti pour un header par projet

  5. #5
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    'limite, il est peut-�tre possible de configurer le compilateur, en lan�ant deux phases de pr�processing ? p.ex. lancer le pr�processeur sur la source, puis lancer la compilation totale sur la source ainsi g�n�r�e ... ?

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par Ekleog Voir le message
    'limite, il est peut-�tre possible de configurer le compilateur, en lan�ant deux phases de pr�processing ? p.ex. lancer le pr�processeur sur la source, puis lancer la compilation totale sur la source ainsi g�n�r�e ... ?
    J'ai du bosser avec un outil qui faisait �a. Conclusion => � bannir car c'est tr�s p�nible (probl�me principal #idef/define des headers vir�s � la premi�re phase puis injection par besoin de nouvel include lors de la seconde passe)

  7. #7
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Ah.

    La solution est peut-�tre alors de pr�poser les #define qui sont pr�sents � la fin du premier preprocessing au d�but du fichier pr�process�.
    Je m'explique, avec un exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    // include_once.h
    #ifndef include_once
    #define include_once
    // ...1
    #endif
    Le fichier de d�part :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    #define INCL #include <include_once.h>
    #include <include_once.h>
    INCL
    // ...2
    Premier pr�processing :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    // ...1
    #include <include_once.h>
    // ...2
    Pr�posage des defines pr�sents � la fin :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    #define include_once
    #define INCL #include <include_once.h>
    // ...1
    #include <include_once.h>
    // ...2
    Second pr�processing :
    Mais, bon, �a n�cessite quasiment le d�veloppement d'un pr�processeur personnel (simplifi� par boost.wave, quand m�me).

    Une autre solution serait de ne pas �tendre les include � la seconde phase, mais �a r�duirait de beaucoup l'utilit� ...

  8. #8
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Ou alors il faudrait les Modules.

    (je sens que �a va devenir un running gag depuis les conf�rences Going Native).


    Bon plus s�rieusement, je ne vois aucune mani�re "simple" de le faire sans avoir � �crire ou g�n�rer un fichier header sp�cifique � chaque projet.

  9. #9
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Je n'ai pas encore eu le temps d'�couter toutes les Going Native, tu peux pr�ciser ?

  10. #10
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Citation Envoy� par Ekleog Voir le message
    Je nai pas encore eu le temps d'�couter toutes les Going Native, tu peux pr�ciser ?
    En gros, les stars du C++/du commit� disaient que le probl�me avec les Modules c'est qu'on ne comprends pas bien ce qu'ils resolvent : la plupart des gens y voient la solution � leurs probl�mes sp�cifiques, m�me si ils sont contradictoires entre les diff�rentes personnes. Du coup la blague c'est que les modules c'est une de ces features virtuellement miracle.

    Et c'est aussi pour �a qu'il y a peu de chances pour qu'on les ai dans moins de 5 ans... sauf si l'impl�mentation (dispo dans CLang) prouve l'utilit�, aide � acc�l�rer le mouvement (ou l'inverse).

Discussions similaires

  1. [AC-2007] import export fichier txt macro vb
    Par kaynan dans le forum VBA Access
    R�ponses: 1
    Dernier message: 29/12/2013, 21h22
  2. [XL-2003] Importer/Exporter des macros
    Par Krovax dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 15/04/2009, 22h05
  3. Import/export Dynamique
    Par Younes dans le forum VBA Access
    R�ponses: 8
    Dernier message: 30/01/2009, 16h46
  4. Pr�cisions sur Import/export
    Par electro dans le forum Import/Export
    R�ponses: 9
    Dernier message: 15/10/2004, 13h34
  5. [Newbie] Import / Export Eclipse
    Par Latyr_dev dans le forum Eclipse Java
    R�ponses: 1
    Dernier message: 16/07/2004, 12h22

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