pelly1308
Messages postés13Date d'inscriptionjeudi 18 décembre 2003StatutMembreDernière intervention 5 septembre 2005
-
24 août 2005 à 18:27
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
25 août 2005 à 21:10
Bonjour.
Voilà, j'ai un proplème avec les directives de compilation.
J'ai 3 modes de compilation possibles: LIGHT, SPECIAL et sans directive.
Les compilations avec LIGHT et SPECIAL ont certains codes en commun, et j'aurais voulu savoir comment regrouper leur code, avec quelque chose du type {IFDEF LIGHT OR SPECIAL} Code {ENDIF}, mais je ne trouve pas la syntaxe.
J'ai aussi pensé à faire:
{$IFDEF SPECIAL}
{$DEFINE SPECIALETLIGHT}
{$ENDIF}
{$IFDEF LIGHT}
{$DEFINE SPECIALETLIGHT}
{$ENDIF}
et ensuite utiliser {IFDEF SPECIALETLIGHT} Code {ENDIF}.
Mais visiblement, le DEFINE est local, et ne peux pas être pour tout le projet, ou alors, où faut-il le placer?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 24 août 2005 à 22:40
On peut utiliser les options du projet pour déclarer des définitions conditionnelles. Mais cela est bien quand on fonctionne en tout ou rien.
Dans ton cas, ce n'est pas adapté car tu gères plusieurs niveaux.
La solution que je préconise est de créer un fichier texte dans lequel tu déclares tes directives. Par convention, ce type de fichier porte l'extension .inc (pour "include").
Ensuite, dans les unités devant connaître l'état des commutateurs définis, tu ajoutes une ligne au début comme ceci :
{$I mesDéfinitions.inc}
Ainsi, il suffit de maintenir un seul fichier de déclarations pour qu'il s'applique à toutes les unités dans lesquelles il est référencé par une directive include {$I}.
Dans le code, tu exploites normalement ces définitions :
{$IfDef special}
// version spéciale
{$EndIf}
{$IfDef Light}
// version light
{$EndIf}
{$IfNDef special}
{$IfNDef light}
//version autre
{$EndIf}
{$EndIf}
Si tu utilises Delphi 7 et +, il est encore plus commode en utilisant la nouvelle syntaxe :
{$If defined(special) or defined(ligth)}
//version light ou special : code commun
{$If defined(Special)}
// supplément version spéciale
{$Else}
//supplément version light
{$IfEnd
{$else}
// version autre
{$IfEnd}
<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.