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

Code : Tout sélectionner
;START_LIB
ProcedureDLL Add(val0, val1)
ProcedureReturn val0 + val1
EndProcedure
;STOP_LIB
- 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)
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
Code : Tout sélectionner
Import "MyTest.lib"
Add(val0, val1)
EndImport
Debug Add(1, 2)
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)
Oui.Zorro a écrit :tu avais mis le fichier Dll a coté de ton prg de test ??
Code : Tout sélectionner
List.s()=StringField(Ligne.s,2," ") ; recup ce qui suit "ProcedureDll"
Code : Tout sélectionner
ProcedureDLL.i addi(a,b)
il y a un deuxieme espace apres la virgule !!ProcedureDLL.i Add(val0, val1)
Code : Tout sélectionner
ProcedureDLL.i Add(val0, val1)
Code : Tout sélectionner
ProcedureDLL.i Add(val0,val1)
Ouiiii ca fonctionne. Merci ZorroZorro a écrit :ça va le faire