Sphinx (le tailbite du pauvre )
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Sphinx (le tailbite du pauvre )
Avec moi c'est marche normale
Apres moi...ça marchera pour tout le monde..."j'suis le chieur étalon"
Apres moi...ça marchera pour tout le monde..."j'suis le chieur étalon"
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Sphinx (le tailbite du pauvre )
Donc ca veut dire que j'ait même pas besoin de tester, ca marche puisque KCC y arrive
Donc... Super, merci Zorro C'est trés utile ce joli animal égyptien, je crois que je vais l'adopter
Donc... Super, merci Zorro C'est trés utile ce joli animal égyptien, je crois que je vais l'adopter
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Sphinx (le tailbite du pauvre )
J'suis là pour ça
Avec Kcc, le mot "Beta" testeur prend tout son sens littéraire
Avec Kcc, le mot "Beta" testeur prend tout son sens littéraire
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sphinx (le tailbite du pauvre )
Bon .... et bien chez moi ça ne fonctionne pas.
- J'ai crée mon fichier source à compiler CreateDLL.pb dans lequel j'ai crée la procédure DLL Add() comme suit- Comme tu peux le voir les balises ;START_LIB et ;STOP_LIB sont présentes.
- J'ai lancé Sphinx et j'ai sélectionné le mon source CreateDLL.pb
- Message de sphinxet ... erreur Add() n'est pas une fonction !!
Dans mon dossier d'installation pas de DLL et pas de imp.
- J'ai crée mon fichier source à compiler CreateDLL.pb dans lequel j'ai crée la procédure DLL Add() comme suit
Code : Tout sélectionner
;START_LIB
ProcedureDLL Add(val0, val1)
ProcedureReturn val0 + val1
EndProcedure
;STOP_LIB
- J'ai lancé Sphinx et j'ai sélectionné le mon source CreateDLL.pb
- Message de sphinx
- Je relance le compilateur depuis le menu Compilateur et teste ma fonction avec unLa librairie Lib_CreateDLL.imp est cée
a cet endroit
c:\Program Files (x86)\PureBasic560\PureLibrairies\Windows\
Code : Tout sélectionner
Debug Add(3, 2)
Dans mon dossier d'installation pas de DLL et pas de imp.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Sphinx (le tailbite du pauvre )
T'as pas comme moi au début un chemin à la con pour accéder au dossier ou y'a tout le bin's ?
Moi pour que ça marche j'ai créé comme Zorro me l'a dit un "c:\Sphinx\"
Moi pour que ça marche j'ai créé comme Zorro me l'a dit un "c:\Sphinx\"
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sphinx (le tailbite du pauvre )
A partir du moment ou le fichier .imp n'est pas dans le dossier d'installation de purebasic aucun code faisant appel aux fonctions de la DLL ne peut fonctionner.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Sphinx (le tailbite du pauvre )
Pour que ça marche, j'ai suivi la doc à la lettre
http://www.purebasic.fr/french/viewtopi ... 83#p195183
En prenant bien garde de creer le dossier dans un chemin sans espace, parenthèse, etc ... enfin caractères mal géré par le compilo ...
http://www.purebasic.fr/french/viewtopi ... 83#p195183
En prenant bien garde de creer le dossier dans un chemin sans espace, parenthèse, etc ... enfin caractères mal géré par le compilo ...
Re: Sphinx (le tailbite du pauvre )
Bonjour,
Petite correction pour éviter le problème de Falsam, ajouter des " au répertoire de fichier car si espace cela devient un autre argument. Du style pour les deux ligne avec 'RunProgram()" :
1> ~"\"" + File_pb.s + ~"\" /dll /exe \"" + File_dll.s + ~"\""
2> ~"\"" + File_poi.s + ~"\" --Import \"" + path_imp.s + ~"\""
Cordialement,
GallyHC
Petite correction pour éviter le problème de Falsam, ajouter des " au répertoire de fichier car si espace cela devient un autre argument. Du style pour les deux ligne avec 'RunProgram()" :
1> ~"\"" + File_pb.s + ~"\" /dll /exe \"" + File_dll.s + ~"\""
2> ~"\"" + File_poi.s + ~"\" --Import \"" + path_imp.s + ~"\""
Code : Tout sélectionner
;***********************************************
;Titre :*Sphinx
;Auteur : Zorro
;Date :11/09/2017
;Heure :09:37:08
;Version Purebasic : PureBasic 5.60 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Win
EndEnumeration
;}
;{ Gadgets
Enumeration
#Titre
#Text_1
#Button_Make
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Titre
EndEnumeration
;}
Define.l Event
;}
; **************************************************************************
Declare openwindow_win()
Declare create_poi(file_pb.s,file_poi.s,file_lib.s)
Declare compile_dll(file_pb.s,file_dll.s)
Declare.s compile_imp(file_poi.s, path_imp.s)
Enumeration
#file
EndEnumeration
Global Path_home.s=GetCurrentDirectory()
;;chemin_compiler_32$ =#PB_Compiler_Home+"Compilers\"+"pbcompiler.exe"
; ***************************************************************************
OpenWindow_Win()
;{- Event loop
Repeat
Event = WaitWindowEvent(12)
Select Event
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Titre
Case #Text_1
Case #Button_Make
File_pb.s=OpenFileRequester( "choisir le fichier PB DLL_source",GetCurrentDirectory(),"*.*",0) ; fichier a compiler en DLL
Chemin_Travail.s=GetPathPart(File_pb.s)
File_dll.s=Chemin_Travail.s+GetFilePart(File_pb.s,#PB_FileSystem_NoExtension)+".dll"
File_lib.s=GetFilePart(File_pb.s,#PB_FileSystem_NoExtension)+".lib"
File_imp.s="Lib_"+ GetFilePart(File_pb.s,#PB_FileSystem_NoExtension)+".imp"
File_poi.s=Chemin_Travail.s+GetFilePart(File_pb.s,#PB_FileSystem_NoExtension)+".poi"
path_imp.s= #PB_Compiler_Home + "PureLibraries\Windows\" + File_imp.s
Create_POI(File_pb.s,File_poi.s,File_lib.s)
Compile_Dll(File_pb.s,File_dll.s)
compile_imp(File_poi.s, path_imp.s)
MessageRequester( "Rapport","La librairie "+ File_imp.s + " est crée "+Chr(10)+" a cet endroit : "+Chr(10)+#PB_Compiler_Home + "PureLibraries\Windows\")
End
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Win
CloseWindow(#Win)
Break
EndSelect
EndSelect
ForEver
;
;}
;- Zone Procedures
Procedure OpenWindow_Win()
;by zorro
If OpenWindow(#Win, 568, 158, 260, 174, "Sphinx", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
;If CreateGadgetList(WindowID(#Win))
TextGadget(#Titre, 60, 5, 140, 40, "SPHINX ")
TextGadget(#Text_1, 65, 45, 65, 15, "By Dobro")
ButtonGadget(#Button_Make, 75, 105, 105, 35, "Make Lib")
; Gadget Fonts
SetGadgetFont(#Titre, LoadFont(#Font_Titre, "Microsoft Sans Serif", 24, #PB_Font_Bold|#PB_Font_HighQuality))
;EndIf
EndIf
EndProcedure
;
Procedure Create_POI(File_pb.s,File_poi.s,File_lib.s)
;by zorro
NewList List.s()
OpenFile(#file,File_pb.s)
While Eof(#file) = 0
Ligne.s=ReadString(#file)
Ligne.s=Trim(Ligne.s," ") ; retire espaces
Ligne.s=Trim(Ligne.s,Chr(9)) ;retire TAB
If LCase(Ligne.s)=";stop_lib"
Flag=#False
CloseFile(#file)
; ecriture du poi
OpenFile(#File,File_poi.s)
WriteStringN(#file,"Import "+Chr(34)+File_lib.s+Chr(34))
ForEach List.s()
WriteStringN(#File,List.s())
Next
WriteStringN(#file,"EndImport")
CloseFile(#file)
ProcedureReturn
EndIf
If Flag=#True ; on creer la list
If FindString(Ligne.s,"ProcedureDll" ,1,#PB_String_NoCase)>0
AddElement(List.s())
List.s()=StringField(Ligne.s,2," ") ; recup ce qui suit "ProcedureDll"
EndIf
EndIf
If LCase(Ligne.s)=";start_lib"
Flag=#True ; la ligne suivante commence la lib
EndIf
Wend
CloseFile(#file)
EndProcedure
;
Procedure Compile_Dll(File_pb.s,File_dll.s)
;by zorro
Shared Sortie$
Compiler = RunProgram(#PB_Compiler_Home + "Compilers\pbcompiler.exe",~"\"" + File_pb.s + ~"\" /dll /exe \"" + File_dll.s + ~"\"", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Compiler
While ProgramRunning(Compiler)
If AvailableProgramOutput(Compiler)
Sortie$ + ReadProgramString(Compiler) + Chr(13)
EndIf
Wend
CloseProgram(Compiler)
EndIf
EndProcedure
;
Procedure.s compile_imp(File_poi.s, path_imp.s)
;by zorro
; Merci a Chi ;o)
Shared Sortie$
Compiler = RunProgram(#PB_Compiler_Home + "Compilers\pbcompiler.exe",~"\"" + File_poi.s + ~"\" --Import \"" + path_imp.s + ~"\"", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Compiler
While ProgramRunning(Compiler)
If AvailableProgramOutput(Compiler)
Sortie$ + ReadProgramString(Compiler) + Chr(13)
EndIf
Wend
CloseProgram(Compiler)
EndIf
DeleteFile(File_poi.s)
EndProcedure
; Epb
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sphinx (le tailbite du pauvre )
@GallyHC : Merci pour ta correction. Le fichier contenant les déclarations de procédure *.imp est bien crée au bon endroit. Mais si je lance mon code de test Debug Add(1, 2) ça ne fonctionne toujours pas. (J'ai bien relancé le compilateur)
@KCC : Comme tu as pu le voir dans ma démarche sur ce topic http://www.purebasic.fr/french/viewtopi ... 25#p195225 j'ai fait la même chose. je n'ai pas l'esprit tordu comme toi ^-^.
@Zorro : je me suis dis que peut être ma DLL ne fonctionnait pas. Alors j'ai fait un import manuel de la libet là pas de souci ça fonctionne.
En tout ca c'est vraiment un taillbite du pauvre car dans tous les cas la DLL doit etre présente. La lib ne sert qu'à établir une communication entre ton code et la DLL.
Avec Tailbite, pas besoin de DLL.
@KCC : Comme tu as pu le voir dans ma démarche sur ce topic http://www.purebasic.fr/french/viewtopi ... 25#p195225 j'ai fait la même chose. je n'ai pas l'esprit tordu comme toi ^-^.
@Zorro : je me suis dis que peut être ma DLL ne fonctionnait pas. Alors j'ai fait un import manuel de la lib
Code : Tout sélectionner
Import "MyTest.lib"
Add(val0, val1)
EndImport
Debug Add(1, 2)
En tout ca c'est vraiment un taillbite du pauvre car dans tous les cas la DLL doit etre présente. La lib ne sert qu'à établir une communication entre ton code et la DLL.
Avec Tailbite, pas besoin de DLL.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Sphinx (le tailbite du pauvre )
tu avais mis le fichier Dll a coté de ton prg de test ??
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Sphinx (le tailbite du pauvre )
Bonjour,
Je voudrais signaler 2 petites choses concernant l'utilisation de Sphinx
Si comme moi, vous avez installé PB dans "C:\Program Files"
1) il faut activer le flag "Request Administrator Mode for ...".
Autrement vous n'aurez pas les droits d'écriture dans C:\Program Files\Purebasic\...
2) il faut modifier la ligne suivante:par car les espaces ne sont pas supportés.
C'est tout.
Merci Zorro
cage
Je voudrais signaler 2 petites choses concernant l'utilisation de Sphinx
Si comme moi, vous avez installé PB dans "C:\Program Files"
1) il faut activer le flag "Request Administrator Mode for ...".
Autrement vous n'aurez pas les droits d'écriture dans C:\Program Files\Purebasic\...
2) il faut modifier la ligne suivante:
Code : Tout sélectionner
path_imp.s= #PB_Compiler_Home + "PureLibraries\Windows\" + File_imp.s
Code : Tout sélectionner
path_imp.s= Chr(34)+#PB_Compiler_Home + "PureLibraries\Windows\" + File_imp.s+Chr(34)
C'est tout.
Merci Zorro
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sphinx (le tailbite du pauvre )
Oui.Zorro a écrit :tu avais mis le fichier Dll a coté de ton prg de test ??
Je te donne le contenu de mon espace de test et dis moi ce qui ne va pas.
http://falsam.com/Download/purebasic/Sphinx.zip
Environnement Windows 10 et PureBasic 5.60 (x86) - Compilation mode admin
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Sphinx (le tailbite du pauvre )
ça viens de la ligne 119 de Sphinx
au moment ou je creer le fichier d'import
j'utilise le code
c'est a dire que je recupere ce qui suis le premier espace rencontré !
dans mon exemple la librairie les proceduredll ont la forme suivante :
ce qui suit le premier espace c'est : "addi(a,b)" , donc ça marche
alors qu'avec ta librairie tu as ecris :
donc le test s'arrete là !!
Sphinx ne recupere que :"Add(val0,"
donc le fichier d'import (extension *.poi pour Sphinx) , ne conviens pas !!
j'ai pas mis de test pour virer les espaces dans les lignes de code de ProcedureDll
ecris ta lib sans espace , ça va marcher
donc remplace tes ""
par
ça va le faire
je vais modifier Sphinx dans ce sens
au moment ou je creer le fichier d'import
j'utilise le code
Code : Tout sélectionner
List.s()=StringField(Ligne.s,2," ") ; recup ce qui suit "ProcedureDll"
dans mon exemple la librairie les proceduredll ont la forme suivante :
Code : Tout sélectionner
ProcedureDLL.i addi(a,b)
alors qu'avec ta librairie tu as ecris :
il y a un deuxieme espace apres la virgule !!ProcedureDLL.i Add(val0, val1)
donc le test s'arrete là !!
Sphinx ne recupere que :"Add(val0,"
donc le fichier d'import (extension *.poi pour Sphinx) , ne conviens pas !!
j'ai pas mis de test pour virer les espaces dans les lignes de code de ProcedureDll
ecris ta lib sans espace , ça va marcher
donc remplace tes "
Code : Tout sélectionner
ProcedureDLL.i Add(val0, val1)
par
Code : Tout sélectionner
ProcedureDLL.i Add(val0,val1)
je vais modifier Sphinx dans ce sens
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sphinx (le tailbite du pauvre )
Ouiiii ca fonctionne. Merci ZorroZorro a écrit :ça va le faire
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Sphinx (le tailbite du pauvre )
j'ai corrigé le code pour que ça corrige ce genre de chose Merci
(et j'ai ajouté la modif de Case )....
@GallyHC , j'ai pas adopté ta modif, car en fait, .... je ne la comprends pas du tout !
(et j'ai ajouté la modif de Case )....
@GallyHC , j'ai pas adopté ta modif, car en fait, .... je ne la comprends pas du tout !
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"