Page 2 sur 3
Re: Sphinx (le tailbite du pauvre )
Publié : lun. 11/sept./2017 13:53
par Kwai chang caine
Avec moi c'est marche normale

Apres moi...ça marchera pour tout le monde..."j'suis le chieur étalon"

Re: Sphinx (le tailbite du pauvre )
Publié : lun. 11/sept./2017 23:33
par JohnJohnsonSHERMAN
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

Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 8:25
par Kwai chang caine
J'suis là pour ça
Avec Kcc, le mot "Beta" testeur prend tout son sens littéraire

Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 12:34
par falsam
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
Code : Tout sélectionner
;START_LIB
ProcedureDLL Add(val0, val1)
ProcedureReturn val0 + val1
EndProcedure
;STOP_LIB
- 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 sphinx
La librairie Lib_CreateDLL.imp est cée
a cet endroit
c:\Program Files (x86)\PureBasic560\PureLibrairies\Windows\
- Je relance le compilateur depuis le menu Compilateur et teste ma fonction avec un
et ... erreur Add() n'est pas une fonction !!
Dans mon dossier d'installation pas de DLL et pas de imp.
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:01
par Kwai chang caine
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\"
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:05
par falsam
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.
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:09
par Kwai chang caine
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 ...
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:13
par GallyHC
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 + ~"\""
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
Cordialement,
GallyHC
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:21
par falsam
@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 lib
Code : Tout sélectionner
Import "MyTest.lib"
Add(val0, val1)
EndImport
Debug Add(1, 2)
et 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.
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:44
par Zorro
tu avais mis le fichier Dll a coté de ton prg de test ??
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:47
par cage
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:
Code : Tout sélectionner
path_imp.s= #PB_Compiler_Home + "PureLibraries\Windows\" + File_imp.s
par
Code : Tout sélectionner
path_imp.s= Chr(34)+#PB_Compiler_Home + "PureLibraries\Windows\" + File_imp.s+Chr(34)
car les espaces ne sont pas supportés.
C'est tout.
Merci Zorro
cage
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 13:49
par falsam
Zorro a écrit :tu avais mis le fichier Dll a coté de ton prg de test ??
Oui.
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
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 14:21
par Zorro
ça viens de la ligne 119 de Sphinx
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"
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 :
ProcedureDLL.i Add(val0, val1)
il y a un deuxieme espace apres la virgule !!
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
Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 14:31
par falsam
Zorro a écrit :ça va le faire
Ouiiii ca fonctionne. Merci Zorro

Re: Sphinx (le tailbite du pauvre )
Publié : mar. 12/sept./2017 14:35
par Zorro
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 !
