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 :lol:
Apres moi...ça marchera pour tout le monde..."j'suis le chieur étalon" :mrgreen:

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

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 :lol:
Avec Kcc, le mot "Beta" testeur prend tout son sens littéraire :mrgreen:

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

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.

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

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 :

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

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

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 ! :oops: :lol: