[résolu]Cet outil me fait flipper - ProcedureReturn

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

[résolu]Cet outil me fait flipper - ProcedureReturn

Message par tinangel »

Bonjour tout le monde,

Ca fait quelques temps déjà que je ne suis pas revenu sur le forum.

Je viens de reprendre la programmation purebasic pour un projet et j'avoue que je me retrouve très vite bloqué par des choses qui semble pourtant évidente.

Je m'explique, j'ai écris un script sous le langage Python3 et je voudrais ajouter un module écrit en PureBasic car je pensais qu'il m'apporterait un certaine souplesse. J'ai voulu créer une bibliothèque perso de la manière suivante :

Code : Tout sélectionner

;Includes
if OSVersion() >  #PB_OS_Windows_XP
   XIncludeFile  "libs\request.pb"
else
   XIncludeFile  "libs/request.pb"
--> Je travaille sous Ubuntu et les tests ont été effectués en 4.61 et 5 béta 5. Je voulais séparer les plateformes Windows de MacOSX et Linux.
--> Résultat :
1/ OSVersion me renvoit sur la version Linux Ubuntu 12 --> que m'a plateforme est en fait un Windows 2000
2/ Peut importe la condition (j'ai même essayé d'utiliser l'adresse du répertoire de l'application et faire une recherche avec FindString pour détecter la présence d'un "/" ou "\"), cela à eu pour effet d'exécuter le XIncludeFile alors qu'il est inclut dans une condition IF.

Bon au final j'ai du utiliser ceci :

Code : Tout sélectionner

IncludePath "libs"
XIncludeFile  "request.pb"

--> Perso je trouve pas ça génial si je dispose de sous-dossier car je devrait utiliser les "/" et les "\" et je suis de nouveau dans la panade :(

Bon à la limite il y a une solution je ferais avec c'est pas la fin du monde.

Maintenant mon autre problème que je trouve obérant s'il n'existe pas d'alternative : les ProcédureReturn
- Ce qu'il faut savoir c'est que j'ai une base de données SQLite dans laquelle je dois interroger. Pour ça je voulais créer une liste d'élément dans ma librairie "keys.pb" puis pour éviter du code superflu et inutile, je ferais appel à ces infos là quand il me serait nécessaires. Voilà mon code actuel :

Code : Tout sélectionner

Procedure InformationDescriptionKeys():
      NewList elements.s()
          AddElement(elements())
          elements()  = "num_description"
          AddElement(elements())
          elements()  = "language"
          AddElement(elements())
          elements()  = "version"
          AddElement(elements())
          elements()  = "content_new"
          AddElement(elements())
          elements()  = "content_alert"
          AddElement(elements())
          elements()  = "content_modify"
          AddElement(elements())
          elements()  = "global_title" 
          AddElement(elements())
          elements()  = "new_title"
          AddElement(elements())
          elements()  = "modify_title"
          AddElement(elements())
          elements()  = "alert_title"
          AddElement(elements())
          elements()  = "poids"  
      ProcedureReturn  elements()
  EndProcedure

--> Et là j'hallucine lorsque je lis dans la doc qu'il n'est pas possible de renvoyer une liste, un tableau ou une map dans une procédure. Et là je trouve ça beaucoup plus grave. Donc je me dis que j'ai sûrement un moyen autre pour me permettre de faire ça ... n'importe quel langage est normalement sensé renvoyer une liste, un tableau ... Je ne vois que ça, j'ai raté quelques chose c'est sûr ...mais quoi ?

J'ai feuilleté les exemples et bien entendu aucun ne traite de liste/chaines. Sur le forum j'ai pas trouvé mon bonheur non plus.

C'est pour cette raison que je viens demander conseil à des personnes plus expérimentés que moi.

Une personne aurait-il l'amabilité de m'aider sur ce problème s'il vous plait ?

Je vous en remercie d'avance.

Cordialement,

Tinangel.



edit

Je suis un gros boulet la solution est là --> http://www.purebasic.com/french/documen ... hared.html

merci quand même

/edit
Dernière modification par tinangel le mar. 16/oct./2012 23:12, modifié 1 fois.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Cet outil me fait flipper - ProcedureReturn, Xinclude ..

Message par kernadec »

bonjour

Global NewList elements.s()

Cordialement
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

Re: [résolu]Cet outil me fait flipper - ProcedureReturn

Message par tinangel »

merci kernadec pour cette info supplémentaire. J'ai editer en meme temps que tu as posté. Ta solution fonctionne mais j'évite au maximum d'utiliser les globals.

Il me semble que Shared correspond aux procedures.

Dans tout les cas merci encore d'avoir prit le temps.

Bonne soirée a toi.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [résolu]Cet outil me fait flipper - ProcedureReturn

Message par djes »

Pour ton problème d'OS, tu mélanges deux trucs :

OsVersion() est une fonction qui fonctionne lors de l'exécution de ton programme ; les include sont insérés lors de la compilation de ton programme, donc AVANT l'exécution. Tu comprends que tu ne peux pas utiliser OsVersion() pour faire des includes. La solution est là (voir la doc) :

Code : Tout sélectionner

CompilerSelect #OS
    CompilerCase #AmigaOS
      ; code spécifique Amiga
    CompilerCase #Linux
      ; code spécifique Linux
  CompilerEndSelect
Ce code va te permettre de faire des includes en fonction de l'OS pour lequel tu compiles. Tu auras un exécutable différent par OS.

Autre chose, lors de la compilation, PB ne fait pas de différence entre les '/' et les '\'. C'est différent lors de l'exécution, car PB envoie les chemins tels quels à l'OS.
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

Re: [résolu]Cet outil me fait flipper - ProcedureReturn

Message par tinangel »

Merci pour ta réponse.

Je vais tester ça.

Me faut mettre mes habitudes python de côté pendant un certains temps :| (dur dur ...)

Encore merci à tous pour vos réponses si rapide.
Répondre