Sphinx (le tailbite du pauvre )

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sphinx (le tailbite du pauvre )

Message par Kwai chang caine »

Avec moi c'est marche normale :lol:
Apres moi...ça marchera pour tout le monde..."j'suis le chieur étalon" :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Sphinx (le tailbite du pauvre )

Message par JohnJohnsonSHERMAN »

Donc ca veut dire que j'ait même pas besoin de tester, ca marche puisque KCC y arrive :mrgreen:

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
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sphinx (le tailbite du pauvre )

Message par Kwai chang caine »

J'suis là pour ça :lol:
Avec Kcc, le mot "Beta" testeur prend tout son sens littéraire :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sphinx (le tailbite du pauvre )

Message 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

Code : Tout sélectionner

Debug Add(3, 2)
et ... erreur Add() n'est pas une fonction !!

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%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sphinx (le tailbite du pauvre )

Message 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\"
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sphinx (le tailbite du pauvre )

Message 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.
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%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sphinx (le tailbite du pauvre )

Message par Kwai chang caine »

Pour que ça marche, j'ai suivi la doc à la lettre :wink:
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 ...
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Sphinx (le tailbite du pauvre )

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sphinx (le tailbite du pauvre )

Message 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.
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%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sphinx (le tailbite du pauvre )

Message par Zorro »

tu avais mis le fichier Dll a coté de ton prg de test ??
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Sphinx (le tailbite du pauvre )

Message 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
■ 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
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sphinx (le tailbite du pauvre )

Message 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
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%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sphinx (le tailbite du pauvre )

Message 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 :

Code : Tout sélectionner

ProcedureDLL.i addi(a,b)
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 "

Code : Tout sélectionner

ProcedureDLL.i Add(val0, val1)
"
par

Code : Tout sélectionner

ProcedureDLL.i Add(val0,val1)
ça va le faire

je vais modifier Sphinx dans ce sens
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sphinx (le tailbite du pauvre )

Message par falsam »

Zorro a écrit :ça va le faire
Ouiiii ca fonctionne. Merci Zorro :wink:
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%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sphinx (le tailbite du pauvre )

Message 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 ! :oops: :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre