FAQ PureBasicConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 68, dernière mise à jour : 3 janvier 2013 Ajouter une question
Bienvenue dans la F.A.Q. PureBasic !
Celle-ci va tenter de répondre aux questions les plus fréquemment posées sur le langage PureBasic et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le PureBasic, et ne demande qu'à être enrichie par vos expériences personnelles.
Bien entendu, malgré toute l'attention qui a pu être portée à cette F.A.Q., des erreurs ont toujours pu s'y glisser. Prenez donc toutes les précautions qui s'imposent avant d'essayer un exemple.
Nous vous souhaitons une bonne lecture ! Et n'oubliez pas qu'en cas de problème, vous pourrez toujours poser votre question sur le forum PureBasic !
L'équipe PureBasic de Developpez.
- Comment communiquer avec le compilateur ?
- Comment vérifier si le compilateur est prêt ?
- Comment interroger le compilateur ?
- Comment récupérer la réponse du compilateur ?
- Comment écrire un préprocesseur ?
- Bash script pour compiler rapidement vos codes pour Linux et Windows 32\64
- Comment créer un fichier résident ?
Le compilateur est très docile, si on lui demande gentiment il est capable de répondre à nos questions. On peut par exemple lui demander la liste des champs dans une structure donnée, ou lui demander la liste des fonctions qu'il connait, on obtient ainsi non seulement la liste des fonctions PureBasic mais aussi la liste des fonctions des bibliothèques tierces installées dans le répertoire PureBasic. Mais avant d'interroger le compilateur il faut le démarrer. Pour cela on utilise tout simplement la commande RunProgram() avec les options suivantes :
- #PB_Program_Hide : Lance le programme en mode invisible.
- #PB_Program_Open : Ouvre des canaux de communication entre le programme lancé et le programme PureBasic.
- #PB_Program_Read : Lecture possible sur la sortie standard (stdout).
- #PB_Program_Write : Ecriture possible sur l'entrée standard (stdin).
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 |
Compilateur = RunProgram(#PB_Compiler_Home+"Compilers\Pbcompiler.exe", "/STANDBY", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide)
If Compilateur = 0
MessageRequester("Pas de bol", "Le compilateur ne démarre pas")
End
EndIf
; Version du compilateur
;
Reponse$ = ReadProgramString(Compilateur) |
Une fois que vous avez démarré le compilateur, vous devez vérifier qu'il est prêt à discuter avec vous.
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 |
; Vérifie que le compilateur soit prêt
;
Reponse$ = ReadProgramString(Compilateur)
If StringField(Reponse$, 1, Chr(9)) = "ERROR"
MessageRequester("", "Erreur: " + StringField(Reponse$, 2, Chr(9)))
CloseProgram(Compiler)
End
EndIf |
Ok, le compilateur est démarré, il est prêt, alors posons lui une question. Certaines questions ont un paramètre, d'autres non.
Exemple de requête sans paramètre, en réponse Le compilateur renvoie la liste de toutes les structures :
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 | ; interroge le compilateur ; Demande$="STRUCTURELIST" Parametre$="" WriteProgramStringN(Compilateur, Demande$+Chr(9)+Parametre$) |
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 | ; interroge le compilateur ; Demande$="STRUCTURE" Parametre$="point" WriteProgramStringN(Compilateur, Demande$+Chr(9)+Parametre$) |
Il suffit de créer une boucle qui récupère les réponses jusqu'à l'information 'OUTPUT [TAB] COMPLETE'
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 |
; Récupère la réponse du compilateur
Repeat
Reponse$ = ReadProgramString(Compilateur)
If Reponse$ = "OUTPUT"+Chr(9)+"COMPLETE"
Break
EndIf
Texte$ + Reponse$ + Chr(13)
ForEver |
| Code purebasic : | Sélectionner tout |
1 2 3 4 | ;Termine l'échange avec le compilateur WriteProgramStringN(Compilateur, "END") CloseProgram(Compilateur) |
| Code purebasic : | Sélectionner tout |
1 2 3 |
;Affiche le résultat
MessageRequester("", Texte$) |
Vous souhaitez adapter la syntaxe de PureBasic à votre besoin ?
Par exemple, pour accéder au champ d'une structure vous devez l'écrire ainsi : MaVariable\Champ1, et vous aimeriez l'écrire de cette façonMaVariable->Champ1.
Seulement le compilateur ne comprend pas cette syntaxe, et c'est là que le préprocesseur intervient, il transformera votre MaVariable->Champ1 en MaVariable\Champ1 avant de lancer la compilation.
Quelques utilisateurs de PureBasic ont écrit un préprocesseur pour coder dans le style POO (voir ce site pour en savoir plus), ici on se contentera de présenter un exemple très simple.
Dans notre exemple, il s'agit de remplacer tous les "Hello" par des "Yellow".
Commencez par créer un exécutable à partir de ce code:
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
;
; Simple preprocessor example that replaces all "Hello" with "Yellow"
;
#FILE_Input = 0
#FILE_Output = 1
; Read the temporary filename used by the compiler (first argument)
File$ = ProgramParameter()
; Get a path for our temporary file
Temp$ = GetTemporaryDirectory() + "ToolTest.pb"
; Make a copy of the compiler used file, so it can be overwritten
If CopyFile(File$, Temp$)
; read the copy
If ReadFile(#FILE_Input, Temp$)
; re-create the compiler used file so it can be filled with the modified version
If CreateFile(#FILE_Output, File$)
While Not Eof(#FILE_Input)
; process the lines
Line$ = ReadString(#FILE_Input)
Line$ = ReplaceString(Line$, "Hello", "Yellow")
WriteStringN(#FILE_Output, Line$)
Wend
CloseFile(#FILE_Output)
EndIf
CloseFile(#FILE_Input)
EndIf
; Delete the copy
DeleteFile(Temp$)
EndIf |
- Ligne de commande : indiquez l'emplacement de l'exécutable créé avec le code ci-dessus
- Arguments : "%COMPILEFILE" (en ajoutant les " pour prendre en compte les chemins comportants des espaces)
- Evénement pour déclencher l'outil : Avant Compiler/Exécuter
- Attendre la fin du programme : Coché
Ce qui permettra d'exécuter votre outil quand vous lancerez 'Compiler/Exécuter' à partir du menu de l'EDI.
Vous pouvez aussi ajouter un autre outil avec l'événement 'Avant de créer un exécutable' pour lancer l'outil dans cette situation.
Maintenant compilez un code comme celui ci et observez ce qui se passe :
| Code purebasic : | Sélectionner tout |
1 2 |
MessageRequester("", "Hello World!") |
Nécessite : Bash, Wine 1.2+, any 64-bit Linux
Utilisation :
./ScriptName SourceFileName ExecutableFileName
Une seule ligne de commande pour créer les exécutables Win32, Win64, Linux 32 and Linux 64.
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#!/bin/bash
# Script for PureBasic crosplatform build
# Path to PB compilers
# !!! CHANGE THIS PATH TO YOU PUREBASIC PATHES !!!
PureBasic_Path_Linux_x86="/home/jule/Soft/PureBasic/Linux86"
PureBasic_Path_Linux_x64="/home/jule/Soft/PureBasic/Linux64"
PureBasic_Path_Windows_x86="/home/jule/.wine/drive_c/Program Files (x86)/PureBasic"
PureBasic_Path_Windows_x64="/home/jule/.wine/drive_c/Program Files/PureBasic/Win64"
# Check arguments
if [ -n "$1" ]; then
{
src=$1
}
else
{
echo "Input source file name: "
read src
}
fi
if [ -n "$2" ]; then
{
executableName=$src
}
else
{
echo "Input executable file name: "
read executableName
}
fi
# Windows x86
echo
echo "Build Windows x86 binary"
wine "$PureBasic_Path_Windows_x86"/Compilers/pbcompiler.exe $src /exe $executableName.Win32.exe /QUIET
# Windows x64
echo
echo "Build Windows x64 binary"
wine64 "$PureBasic_Path_Windows_x64"/Compilers/pbcompiler.exe $src /exe $executableName.Win64.exe /QUIET
# Linux x86
echo
echo "Build Linux x86 binary"
export PUREBASIC_HOME=$PureBasic_Path_Linux_x86
export PATH=$PUREBASIC_HOME/compilers:$PATH
$PureBasic_Path_Linux_x86/compilers/pbcompiler $src -e $executableName.Lin86 -q
# Linux x64
echo
echo "Build Linux x64 binary"
export PUREBASIC_HOME=$PureBasic_Path_Linux_x64
export PATH=$PUREBASIC_HOME/compilers:$PATH
$PureBasic_Path_Linux_x64/compilers/pbcompiler $src -e $executableName.Lin64 -q
# Finish
echo
echo "******************************************"
echo "Done!" |
Vous utilisez souvent les mêmes structures, constantes ou macros ? Tout ceci contenus dans un tas de fichiers que vous devez inclure selon vos différents projets, alors sachez qu'il y a plus simple --> Les fichiers résidents !
Ce sont des fichiers qui contiennent des structures (sans Array, List ou Map), des constantes et/ou des macros. Plus besoin d'include, ils sont disponibles au démarrage du compilateur.
Comment procéder ? Il suffit de copier les structures, les constantes et les macros que vous souhaitez rendre résidents dans un fichier source. Exemple :
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Enumeration 10
#Constante1
#Constante2
EndEnumeration
Structure s_Toto
Pos.f
Test.l
EndStructure
Structure s_titi
Champ.s_toto
EndStructure
Macro BorneMaxi(a, b)
If a > (b)
a = (b)
EndIf
EndMacro |
Il va générer un fichier résident qui se nomme toto.res. Vous n'avez plus qu'à le copier dans votre répertoire PureBasic/Residents. Ou alors indiquez le chemin complet dans le code.
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Compilateur = RunProgram(#PB_Compiler_Home+"/Compilers/pbcompiler", "toto.pb /resident toto.res", "", #PB_Program_Open|#PB_Program_Read)
Sortie$ = ""
If Compilateur
While ProgramRunning(Compilateur)
If AvailableProgramOutput(Compilateur)
Sortie$ + ReadProgramString(Compilateur) + Chr(13)
EndIf
Wend
Sortie$ + Chr(13) + Chr(13)
Sortie$ + "Code de retour : " + Str(ProgramExitCode(Compilateur))
CloseProgram(Compilateur) ; Ferme la connexion vers le programme
EndIf
MessageRequester("Sortie", Sortie$) |
| Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | Debug #Constante2 a = 12 BorneMaxi(a, 7) Debug a Define Truc.s_titi Truc\Champ\Test = 45 |
On retrouve cette syntaxe dans le programme ci-dessus : RunProgram(#PB_Compiler_Home+"/Compilers/pbcompiler", "toto.pb /resident toto.res", "", #PB_Program_Open|#PB_Program_Read).
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2025 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.



