1. #1
    Membre du Club
    Inscrit en
    août 2010
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 89
    Points : 61
    Points
    61

    Par défaut #pragma dans une macro

    Bonjour à tous,

    je ne pense que ce soit possible avec C++Builder (XE2) car je n'ai rien trouvé sur le net, mais j'ai vu qu'on pouvait le faire avec Visual Studio.
    http://msdn.microsoft.com/en-us/library/d9x1s805.aspx

    The compiler also supports the __pragma keyword, which has the same functionality as the #pragma directive, but can be used inline in a macro definition.

    Je voudrais avoir ce genre de macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define REGISTER_STARTUP(class) static void Reg_##class() \
           { \
           class::CreateHandle(); \
           } \
           #pragma startup Reg_##class

  2. #2
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 144
    Points : 14 526
    Points
    14 526

    Par défaut

    Je suppose que tu as testé ta macro et que tu as obtenu un message d'erreur, lequel ?

    J'ai écrit ceci pour un Register de Class automatique dans le fichier H


    Fichier H
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class toto
    {
    private:
      static bool Created;
    public:
      static bool CreateHandle();
    };
    bool toto::Created = toto::CreateHandle();
    Fichier CPP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /*static*/ bool toto::CreateHandle()
    {
      ShowMessage("toto est là !");
      return true;
    }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    août 2010
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 89
    Points : 61
    Points
    61

    Par défaut

    ah tiens c'est vraiment pas bête !

    Je vais vois ce que je peux faire avec ça. Merci !

  4. #4
    Membre Expert Avatar de nirgal76
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2007
    Messages : 654
    Points : 1 232
    Points
    1 232

    Par défaut

    #pragma startup fonctionne sous XE2, le problème doit être plutôt le fait d'avoir #pragma à l'intérieur d'un #define.

    il y a une autre syntax à
    "#pragma argument"
    qui est
    _prama(argument)
    qui permet de remédier à celà mais elle ne fonctionne qu'avec les compilateurs c99 or c++0x. A tester sous XE2, je n'ai pas le courage de le faire

  5. #5
    Membre du Club
    Inscrit en
    août 2010
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 89
    Points : 61
    Points
    61

    Par défaut

    Merci nirgal,

    j'avais testé mais ça ne fonctionne pas.

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

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