PureBasic

Forums PureBasic
Nous sommes le Ven 19/Juil/2019 11:17

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Sam 21/Avr/2018 22:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
Bonsoir a tous !

Je cherche un moyen de tester la présence d'une procédure donnée !

Je n'est rien trouvé du côté du compilo, ou alors j'ai zappé.
Une commande du genre "xinclude" mais pour les procédures me serais bien utile !

Je vous explique pourquoi !
J'ai de nombreux modules (que je veux le plus autonome possible), que j'inclus dans mon
programme principale selon le besoin. Mais souvent dans ces modules se retrouve des
procédures déjà présente dans le programme principale ou dans d'autres modules.

Et le compilo gueule "déjà présent" : Il me faut donc a chaque fois retirer la déclaration,
et la dite procédure...Etc... Et relancer la compil (et j'ai encore oublié cette autre procédure
et je recommence... :twisted: ) Bref pourquoi ne pas avoir une fonction du genre : xincludeproc... :lol:

Si quelqu'un a une astuce ! Merci d'avance :P

Ulix


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Sam 21/Avr/2018 23:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 1626
Bonjour,

Oui il y a une solution et voila un exemple :

Code:
; Procedure test()
;   Debug "Test"
; EndProcedure

CompilerIf Defined(test, #PB_Procedure) = #False
  Debug "On creer"
  Procedure test()
    Debug "Test"
  EndProcedure
CompilerEndIf

Pour le test, il faut retirer les commentaires de la procédure du haut pour voir la différence.

Cordialement,
GallyHC

_________________
Image

Image

Image Official site of PureBasic
Image Official site of SpiderBasic

Configuration : Tower: Windows 7 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.62 (x86 et x64)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Dim 22/Avr/2018 8:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
Merci GallyHC ! :P

J'avais complètement zappé cette fonction de BP ! :oops:

Je vais regardé ça de plus prés, et faire des tests.
Apparemment, cela devrait marcher pour les procédure (#PB_Procedure),
mais pour la déclaration de procédure (#PB_Declare ????), il faut que je regarde.

Merci !
A+ Ulix


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Dim 22/Avr/2018 9:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 1626
Bonjour,

Pour moi le plus simple et de faire comme indiqué plus haut dans tes modules, tu déclares tes procédures avec un "CompilerIf Defined(......., #PB_Procedure) = #False". comme cela si la "function" est déjà présente elle ne sera pas déclarer et dans le cas contraire elles le sera, mais tu es sur que ton module fonctionne toujours.

Cordialement,
GallyHC

_________________
Image

Image

Image Official site of PureBasic
Image Official site of SpiderBasic

Configuration : Tower: Windows 7 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.62 (x86 et x64)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Dim 22/Avr/2018 9:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 10/Sep/2007 11:13
Messages: 1311
perso j'utilise un outil qui ajoute les déclarations automatiquement en fonction des procédures crées a la compilation.
du coup je ne declare plus rien ...

je passe a l'outil l'argument suivants

arguments :%FILE@%COMPILEFILE
event to trigger the tool :before compilation
et je coche :wait until tool quit

dans le code j'ajoute un commentaire
;autodeclare

a l'endroit ou je veux que mes déclarations soient ajoutées.

code a compiler et a configurer comme outil dans PB
Code:
OpenConsole()
st$=ProgramParameter()
Global NewList decl.s()     ; declares
Global NewList origin.s()   ; original code
IN$=StringField(st$,1,"@")  ; code d'origine
OUT$=StringField(st$,2,"@") ; code a envoyer au compilateur
;
rd=ReadFile(#PB_Any,IN$)
If rd
  Repeat
    AddElement( origin())
    origin()=ReadString(rd) 
    If FindString(origin(),"EndProcedure")=0
        If FindString(origin(),"ProcedureReturn")=0
          If FindString(origin(),"Procedure")
            dec$=ReplaceString(origin(),"Procedure","Declare")
            fnd=0
            ForEach decl()
              If decl()=dec$
                fnd=1
                Break
              EndIf
            Next
            If fnd=0
              AddElement(decl())
              decl()=dec$
            EndIf
          EndIf         
        EndIf       
      EndIf
  Until Eof(rd)
  CloseFile(rd)
EndIf
wr=CreateFile(#PB_Any,OUT$)
If wr
  ForEach origin()
    WriteStringN(wr,origin())
    If Trim(LCase(origin()))=";autodeclare"
      ForEach decl()
        WriteStringN(wr,decl())
      Next     
    EndIf   
  Next
  CloseFile(wr)
EndIf

_________________
ImageImage


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Dim 22/Avr/2018 14:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
@ GallyHC !

Je viens de tester la fonction : CompilerIf Defined(......., #PB_Procedure) = #False"

Elle marche bien pour les "procedure", mais pas pour les "declare".
Peut-être faut-il une constante : #PB_Declare ! Elle n'existe pas (en tout cas pas trouver)!

J'ai bien chercher dans l'aide a "Defined", il y a la liste des constates a utilisé avec,
mais pas de #PB_Declare ????

Temps que je n'aurais pas trouvé comment tester les "declare" le compilo me renvoirat
".... The module procedure 'xxxx' has been declared but not defined." :twisted:



@case !
Merci pour ta proposition : Je n'est jamais utilisé d'outil extérieure !
J’apprécie déclarer mes procédures au fur et a mesure de leurs créations, alors travailler sans
ma liste de "Declare" en but de programme.... !!! Je sais pas... A voir si j'ai pas d'autre solution !
En tous cas merci ! :wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 12:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6846
Localisation: IDF (Yvelines)
Une question me brûle les lèvres : Pourquoi faire un déclare d'une procédure qui n'existe pas ?

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 18:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
Salut falsam !

Non !
La procédure et sa déclaration existe dans son module !
Mais module son autonome (le plus possible), cela veut dire que en plus de leurs fonction principale,
ils ont toutes les fonctions ou procédures pour être autonome !
Exemple : Mon module BDGPrinter (Boite de Dialogue Imprimante) a tous ces procédures et fonctions
pour assurer cette autonomie. Je dois avoir +15 procédures (DessinBouton, UserName...) qui ne sont pas
liées directement a la fonction de ce module(gestion imprimante, options d'impression...),
mais permette de faire fonctionné le module (Ex: BDGPrinter).

Lorsque que je développe une application, j'inclus au fur et à mesure les modules (BDGPrinter, OutputVoice,
BDGScanner...) donc j'ai besoin !
Pas besoin de chercher toutes les procédures (annexes ou fonctions), tous est inclus.

Mon problème c'est que le compilo qui "gueule" a chaque fois d'une procédure est déjà dans un autre module
ou dans programme principal... :twisted:

CompilerIf Defined(......., #PB_Procedure) = #False" marche bien pour éviter d'inclure la procédure une
nouvelle fois, cela a résolu 50% de mes problèmes !
Mais il n'y rien de prévu pour la déclaration !. Une constance : #PB_Declare permettrait (peut-être...)
de ne pas mettre en rogne le compilo ! :oops:

J'espéres que j'ai été assez claire, que tu a compris mon propos !
Je suis toujours a la recherche d'une solution (peut-être demander a Fred une nouvelle constante...) :mrgreen:

Ulix


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 18:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 10/Sep/2007 11:13
Messages: 1311
oO mais pourtant la procedure peut etre declarée 50 fois sans erreur
Code:
Declare test()

Declare test()
Declare test()

Declare test()
Declare test()

Declare test()
Declare test()

Declare test()


test()


Procedure test()
  Debug "test"
EndProcedure





du coup faut juste metre le
CompilerIf / endif dans chaque module autour de chaque procédure a déclarer
comme ca pas de compilo gui gueule

idem pour les constantes utilises par les dites procedures faut juste les mettre dans le compilerif / endif pour ne pas les compiler une seconde fois


Code:


; module test
CompilerIf Defined(test, #PB_Procedure) = #False
  Declare test()
  Debug "Not defined"
  #blah=1
  Procedure test()
    If #blah=1
      Debug "test"
     EndIf
   EndProcedure
CompilerEndIf
; module test
CompilerIf Defined(test, #PB_Procedure) = #False
  Declare test()
  Debug "Not defined"
  #blah=1
  Procedure test()
    If #blah=1
      Debug "test"
     EndIf
   EndProcedure
CompilerEndIf


test()



a noter que si on met un déclare test() en début de code le compilateur ne trouve pas la procédure test et renvoi une erreur
ce qui rend le système
CompilerIf Defined(test, #PB_Procedure) = #False
CompilerEndIf
inutile étant donner qu'il faudrait que la procédure soit une fois au moins hors de cette condition
il serait alors préférable de mettre les modules en début de code et de ne pas utiliser de déclare. pour pouvoir utiliser cette astuce.

_________________
ImageImage


Dernière édition par case le Mar 24/Avr/2018 19:27, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 19:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
Salut case !


Ton exemple marche parce que tu n'utilise pas les modules !

Test l'exemple suivant :
Code:

;   Programme principale

;   Ici : Enumeration

;   Ici : Structure

;   ici Globale...


Declare test()


;   Ici mes includes dont mes modules
;   XIncludeFile "xxxx... module   "
;=============================

DeclareModule Patate

Declare test()

EndDeclareModule


Module Patate

CompilerIf Defined(test, #PB_Procedure) = #False
Procedure test()
EndProcedure
CompilerEndIf

EndModule
;==========================

UseModule Patate
;   Mes procedure du programme principales
Procedure test()
  Debug "test"
EndProcedure

;   Lancement du programme
test()



C'est la structure générale de mes applications !

Re moi ! Pour reprendre ton 2ème code module

Code:


;   Programme principale

;   Ici : Enumeration

;   Ici : Structure

;   ici Globale...


Declare test()


;   Ici mes includes dont mes modules
;   XIncludeFile "xxxx... module   "
;=============================
DeclareModule Patate
CompilerIf Defined(test, #PB_Procedure) = #False
  Declare test()
  Debug "Not defined"
  #blah=1
  Procedure test()
    If #blah=1
      Debug "test"
     EndIf
   EndProcedure
CompilerEndIf
EndDeclareModule


Module Patate
CompilerIf Defined(test, #PB_Procedure) = #False
  Declare test()
  Debug "Not defined"
  #blah=1
  Procedure test()
    If #blah=1
      Debug "test"
     EndIf
   EndProcedure
CompilerEndIf
EndModule
;==========================

UseModule Patate
;   Mes procedure du programme principales
Procedure test()
  Debug "test"
EndProcedure

;   Lancement du programme
test()


Pas réussi a faire marché, je dois pas être bon sur ce coup là :cry:

A+


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 19:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 10/Sep/2007 11:13
Messages: 1311
ah !
j'ai peur qu'il n'y ai pas de solution miracle ^^

en tout cas dans cette voie de compilerif/endif

_________________
ImageImage


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 19:47 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3411
Citation:
Pas réussi a faire marché, je dois pas être bon sur ce coup là :cry:


A mon avis, c'est un bug du compilo / macro, a part arrêter d'utilisé les modules, je ne vois pas


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 20:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 296
Localisation: Frontignan
Salut G-Rom !

Le compilo me dit :

Ligne 23: A Procedure can't be declared inside 'DeclareModule'. Use 'Declare' instead.
Traduction google:
Ligne 23: Une procédure ne peut pas être déclarée dans 'DeclareModule'. Utilisez 'Declare' à la place.

Je pense que la réponse du compilo est fausse, ou mauvaise traduction !
L'aide de PB explique de DeclareModule sert a déclarer les procedures (public) !
Il y a une contradiction entre la réponse du compilo est l'aide... mais c'est pas là le plus important !


Es-ce qu'une constante : #PB_Declare, pourrait faire l'affaire ?

On pourrait alors tester la declaration comme suit :
CompilerIf Defined(......., #PB_Declare) = #False"

Je vais attendre une solution, sinon je posterais dans section bug, peut-être que Fred .....!

Ulix


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 20:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 1626
Et comme cela ?

Code:
; ****************************************************************************

DeclareModule Patate
  CompilerIf Defined(test, #PB_Procedure) = #False
    Declare test()
    Debug "Not defined"
  CompilerEndIf
EndDeclareModule

Module Patate
  CompilerIf Defined(test, #PB_Procedure) = #True
    Debug "Not defined"
    #blah = 1
    Procedure test()
      If #blah=1
        Debug "test 1 "
       EndIf
     EndProcedure
  CompilerEndIf
EndModule

; ****************************************************************************

; A METTRE AVEC OU SANS COMMENTAIRE.
;UseModule Patate
; A METTRE AVEC OU SANS COMMENTAIRE.

; ****************************************************************************

CompilerIf Defined(test, #PB_Procedure) = #False
  Procedure test()
    Debug "test 2"
  EndProcedure
CompilerEndIf

test()


Cordialement,
GallyHC

_________________
Image

Image

Image Official site of PureBasic
Image Official site of SpiderBasic

Configuration : Tower: Windows 7 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.62 (x86 et x64)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Est-il possible de tester la présence d'une procedure ?
MessagePosté: Mar 24/Avr/2018 20:38 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3411
ton code a un probleme et démontre le bug :

Code:
CompilerIf Defined(test, #PB_Procedure) = #True


et après tu définis la procédure alors que d'après cette ligne, elle est déjà déclarée, c'est incohérent.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye