export des constantes dans une userlib

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
coder78
Messages : 30
Inscription : lun. 28/mai/2007 13:50
Localisation : essone
Contact :

export des constantes dans une userlib

Message par coder78 »

Bonjour à toutes et à tous.

Je me fabrique une librairie disons..."outils"...
Je créé ma lib avec taillebit sans aucun pb...
Seulement voilà dans ma lib avant mes fonction
ProcedureDLL machin()
...
EndProcedure

je déclare quelques constantes...
#BIDULE_01 = 0
#BIDULE_02 = 1
etc...

Seulement voilà dans une utilisation de ma "Lib" PB ne reconnait pas mes constantes....
Y a t-il une syntaxe particulière pour les exporter ou ai-je omis quelque chose lors de la création de ma lib??

Merci pour votre aide

Fred
OLDCHOOLRESISTANCE pour faire revivre les années 80 !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: export des constantes dans une suerlib

Message par Progi1984 »

Cherche du côté des residents...

Moebius : http://code.google.com/p/moebius-pb/wik ... n_resident
Avatar de l’utilisateur
coder78
Messages : 30
Inscription : lun. 28/mai/2007 13:50
Localisation : essone
Contact :

Re: export des constantes dans une suerlib

Message par coder78 »

Merci Progi1984 !

en réalité j'ai essayé aussi Moebus.
J'ai créé une user lib et ça fait pareil.
Ceci dit je n'ai pas regardé du coté des residents....
Je vais voir ça.

Merci pour l'info!

Fred
OLDCHOOLRESISTANCE pour faire revivre les années 80 !
Avatar de l’utilisateur
coder78
Messages : 30
Inscription : lun. 28/mai/2007 13:50
Localisation : essone
Contact :

Re: export des constantes dans une suerlib

Message par coder78 »

Du coup je me pose une question...
Quelle est la différence entre une userlib et un resident ?
OLDCHOOLRESISTANCE pour faire revivre les années 80 !
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Re: export des constantes dans une suerlib

Message par Fred »

Y'a pas de code dans un resident, juste des declarations de structures et de constantes.
Avatar de l’utilisateur
coder78
Messages : 30
Inscription : lun. 28/mai/2007 13:50
Localisation : essone
Contact :

Re: export des constantes dans une userlib

Message par coder78 »

Merci pour toutes ces précisions !
Fred
OLDCHOOLRESISTANCE pour faire revivre les années 80 !
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: export des constantes dans une userlib

Message par PAPIPP »

Bonjour à tous
Structures, Constantes, Interfaces et Macros aussi sont dans les résidents,
Ici un petit prg pour les compiler dans un fichier type *.res du répertoire Residents

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #String_0
  #String_2
  #String_5
  #Text_0
  #Text_2
  #Text_5
  #Button_0
  #Button_2
  #Button_5
  #Editor_41
  #Button_11
  #Button_12
  #Button_13
  
EndEnumeration
Dim fic${256}(20)
Dim res${256}(20)
;}
Define.l Event,EventWindow,EventGadget,EventType,EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0,398,69,800,446,"Aide pour créer un résident",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    StringGadget(#String_0,145,20,520,25,"")
    StringGadget(#String_2,145,65,520,25,"")
    StringGadget(#String_5,145,115,520,25,"")
    TextGadget(#Text_0,10,20,125,25,"  Nom de la librairie",#PB_Text_Center | #SS_CENTERIMAGE)
    TextGadget(#Text_2, 10, 65, 125, 25, "Nom de la source", #PB_Text_Center|#SS_CENTERIMAGE)
    TextGadget(#Text_5, 10, 115, 125, 25, "Path et nom du résident", #PB_Text_Center|#SS_CENTERIMAGE)
    ButtonGadget(#Button_0, 690, 20, 100, 25, "Parcourir")
    ButtonGadget(#Button_2, 690, 65, 100, 25, "Parcourir")
    ButtonGadget(#Button_5, 690, 110, 100, 25, "Parcourir")
    EditorGadget(#Editor_41, 20, 205, 760, 235)
    ;     Font1 = LoadFont(#PB_Any, "Courier New"  ,  8, #PB_Font_Bold )
    Font1 = LoadFont(#PB_Any, "Courier New"  ,  8)
    SetGadgetFont(#Editor_41, FontID(Font1))
    ButtonGadget(#Button_11, 180, 155, 150, 30, "Création du Batch")
    ButtonGadget(#Button_12, 360, 155, 100, 30, "OK Créez")
    ButtonGadget(#Button_13, 690, 155, 100, 30, "Terminer")
    
    GadgetToolTip(#String_0,"Donnez ou cherchez le nom du dossier où se troube purebasic.exe")
    GadgetToolTip(#Button_0,"Donnez ou cherchez le nom du dossier où se troube purebasic.exe")
    
    GadgetToolTip(#String_2,"Donnez ou cherchez le nom du fichier source en *.pbx")
    GadgetToolTip(#Button_2,"Donnez ou cherchez le nom du fichier source en *.pbx")
    
    GadgetToolTip(#String_5,"Donnez ou cherchez le nom du fichier dans le repertoire RESIDENT en *.res")
    GadgetToolTip(#Button_5,"Donnez ou cherchez le nom du fichier dans le repertoire RESIDENT en *.res")
   
  EndIf
EndProcedure
  
OpenWindow_Window_0()
  
  ;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
      ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
  If EventGadget = #String_0
    ElseIf EventGadget = #String_2
    ElseIf EventGadget = #String_5
      PathFil_Res$=GetGadgetText(#String_5)
    ElseIf EventGadget = #Text_0
    ElseIf EventGadget = #Text_2
    ElseIf EventGadget = #Text_5
      ;************************************************************** BOUTON  Parcourir LIB PB ***********************************************************      
      
    ElseIf EventGadget = #Button_0  ; bouton recherche chemin principal de PB
      Path_lib$ = PathRequester("Donnez la librairie PureBasic", "L:\program Files\purebasic")
      SetGadgetText(#String_0, Path_lib$)
      SetGadgetText(#String_2, Path_lib$)
      SetGadgetText(#String_5, Path_lib$+"RESIDENTS\")
      ;****************************************************** BOUTON  Parcourir du prg.pb qui va faire un résident ********************************      
      
    ElseIf EventGadget = #Button_2  ; recherche prg.pb qui va faire un résident
;       FichierParDefaut$ = "L:\program files\PB431\"; Répertoire et fichier par défaut qui seront affichés
      FichierParDefaut$ = Path_lib$; Répertoire et fichier par défaut qui seront affichés
     ;  Avec la chaîne suivante nous allons définir les filtres ("|" comme séparateur) pour l'affichage de fichier :
      ;  1er  : "Texte (*.txt)" comme nom, ".txt" et ".bat" comme extension autorisée
      ;  2ème : "PureBasic (*.pb)" comme nom, ".pb" comme extension autorisée
      ;  3ème : "Tous les fichiers (*.*)" comme nom, "*.*" comme extension autorisée, valide pour tous les fichiers
      Filtre$ = "PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
      Filtre  = 0                   ; utiliser  par défaut le premier des trois filtres possibles
      Path_Src$ = OpenFileRequester("Choisissez un fichier source", FichierParDefaut$, Filtre$, Filtre)
      SetGadgetText(#String_2, Path_Src$)
      ;****************************************************** BOUTON  Parcourir pour donner le nom du résident ********************************      
      
    ElseIf EventGadget = #Button_5
      ;          Path_Res$ = PathRequester("Donnez le Chemin et dans la zone ,le nom du résident ", GetGadgetText(#String_5))
      FichierParDefaut$ = Path_lib$+"RESIDENTS\defaut.res"; Répertoire et fichier par défaut qui seront affichés
      Filtre$ = "Pb résident (*.res)|*.res |Tous les fichiers (*.*)|*.*"
      Path_Res$ = OpenFileRequester("Donnez le Nom d'un résident existant ou pas ", FichierParDefaut$, Filtre$, Filtre)
      SetGadgetText(#String_5, Path_Res$)
      PathFil_Res$=GetGadgetText(#String_5)
      ;          If FileSize(PathFil_Res$)>0
      ;           If  MessageRequester("ATTENTION LE FICHIER EXISTE DEJA ", "Voulez vous l'écraser",  #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
      ;           Else
      ;           PathFil_Res$=""
      ;           EndIf
      ;          EndIf
    ElseIf EventGadget = #Editor_41
      ;            Debug event
      ;************************************************************** BOUTON  Création du Batch ***********************************************************      
    ElseIf EventGadget = #Button_11
      ;       If FileSize(PathFil_Res$)>0
      ;           If  MessageRequester("ATTENTION FICHIER "+pathfil_res$+" EXISTE DEJA ", "Voulez vous l'écraser",  #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
      ;           Else
      ;           PathFil_Res$=""
      ;           SetGadgetText(#String_5, Path_lib$+"RESIDENTS\")
      ;           EndIf
      ;       EndIf
  If Path_lib$<>"" And Path_Src$<>"" And GetFilePart(PathFil_Res$)<>""
      ft$=Space(255)
      mask$="%YY"+Str(DayOfYear(Date()))
      fp$="PB"+FormatDate(mask$,Date())
      fb$=Path_lib$+fp$+".BAT"
      ;             GetTempFileName_(@U$,@fp$,000,@ft$)
      asci$ = Space($FFF)
      ASCII$="ECHO off"+Chr(10)
      ;             ASCII$+"pushd "+Chr(34)+path_lib$+Chr(34)+Chr(10)
      ;             ASCII$+"If (%2+CHR(10)==() Goto erreurf")
      ASCII$+"If exist "+Chr(34)+PathFil_Res$+Chr(34)+ "  del  "+Chr(34)+ PathFil_Res$+Chr(34)+Chr(10)
      ASCII$+ Chr(34)+Path_lib$+"compilers\pbcompiler"+Chr(34)+" "+Chr(34)+Path_Src$+Chr(34) + " /RESIDENT " +Chr(34)+ PathFil_Res$+Chr(34)+Chr(10)
      ClearGadgetItems(#Editor_41)
      AddGadgetItem(#Editor_41,-1,"REM Fichier "+fb$)
      AddGadgetItem(#Editor_41,-1, ASCII$)
      AddGadgetItem(#Editor_41,-1, "ECHO TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT")
    Else
      MessageRequester("ATTENTION l'une de ces zones n'est pas correcte  ", "Lib="+Path_lib$+Chr(10)+"Source="+Path_Src$+Chr(10)+"Resident="+PathFil_Res$)
    EndIf
    ;************************************************************** BOUTON OK ***********************************************************      
  ElseIf EventGadget = #Button_12   ; Bouton OK
    Texte$ = GetGadgetText(#Editor_41)
    
    For k=1 To 20
      fic$(k)=StringField(Texte$, k, Chr(34))
  If Len(fic$)=0
      mf=k
    EndIf  
If RTrim(LTrim(UCase(fic$(k-1))))="DEL"
    fic2$=fic$(k)
  EndIf
If RTrim(LTrim(UCase(fic$(k-1))))="/RESIDENT"
    fic3$=fic$(k)
  EndIf
Next
fic2$=RTrim(LTrim(fic2$))
fic3$=RTrim(LTrim(fic3$))
                    ;            Debug f_s(fic2$)+f_s(fic3$)
If FileSize(fic2$)>0
If fic2$=fic3$
If  MessageRequester("ATTENTION FICHIER "+fic2$+" EXISTE DEJA ", "Voulez vous l'écraser",  #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
  Else
    PathFil_Res$=""
  EndIf
Else
If  MessageRequester("ATTENTION FICHIER "+fic2$+" EXISTE DEJA ", "Voulez vous le supprimer"+Chr(10)+"et créer "+fic3$,  #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
  Else
    PathFil_Res$=""
  EndIf
EndIf
EndIf
                            
Texte$ = GetGadgetText(#Editor_41)
If Texte$<>"" And  PathFil_Res$<>""
    FB.l=CreateFile(#PB_Any,fb$)
    WriteData(FB, @Texte$, Len(Texte$))
    CloseFile(FB)
    prg=RunProgram("cmd"," /C "+ Chr(34)+fb$+Chr(34) ,"",30)
If prg
  AddGadgetItem(#Editor_41,-1,"******************************** R E S U L T A T S *******************************************")
  s_ascii$=ReadProgramString(prg)
  Texte$=s_ascii$
  OemToChar_(@s_ascii$,@s_ascii$)
  texte2$=s_acii$+Chr(10)
  Resultat=AddGadgetItem(#Editor_41,-1,s_ansi$)
  While ProgramRunning(prg)
    s_ascii$=ReadProgramString(prg)
    OemToChar_(@s_ascii$,@s_ascii$)
    Resultat=AddGadgetItem(#Editor_41,-1,s_ascii$)
    texte2$+s_ascii$+Chr(10)
  Wend
EndIf
;             Debug texte2$
;             Debug Len(texte2$)
For k=1 To 20
  res$(k)=StringField(texte2$,k,Chr(10))
  p_r=FindString(UCase(res$(k)),"RESIDENT",1)
  p_c=FindString(UCase(res$(k)),"CREATED",1)
  
  If p_r<>0
    mp_r=p_r
    If p_c<>0
      mp_c=p_c
      mk=k
    EndIf
  EndIf
Next
EndIf
ElseIf EventGadget=#Button_13
  If mk>0 And mp_r>0 And mp_c>0
    Resultat=DeleteFile(fb$)
    CloseWindow(#Window_0)
    Break
  Else
    If MessageRequester("Vous n'avez pas réussi à créer "+Chr(10)+"Le résident ="+PathFil_Res$,"Voulez-vous continuer ? Oui ou Non",#PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
    Else
      Resultat=DeleteFile(fb$)
      CloseWindow(#Window_0)
      Break
    EndIf
    
  EndIf
EndIf

                                    ; ////////////////////////
Case #PB_Event_CloseWindow
  EventWindow = EventWindow()
If EventWindow = #Window_0
    CloseWindow(#Window_0)
    Break
  EndIf
EndSelect
ForEver
                                ;

exemple de macros à compiler dans un fichier type *.res du répertoire Residents

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<
; <<<<< Cosecante <<<<<
 
Macro Cosec(Angle)
 
   (1/Sin(Angle))
 
EndMacro
 
; <<<<<<<<<<<<<<<<<<<
; <<<<< Secante <<<<<
 
Macro Sec(Angle)
 
   (1/Cos(Angle))
 
EndMacro
 
; <<<<<<<<<<<<<<<<<<<<<<
; <<<<< Cotangente <<<<<
 
Macro Cotan(Angle)
 
   (Cos(Angle)/Sin(Angle))
 
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<
; <<<<< Sin hyperbolique <<<<<
 
Macro SinH(Angle)
 
   ((Pow(#E, Angle) - Pow(#E, -Angle)))/2
 
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<
; <<<<< Cos hyperbolique <<<<<
 
Macro CosH(Angle)
 
   ((Pow(#E, Angle) + Pow(#E, -Angle)))/2
 
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< CoTangente Hyperbolique <<<<<
 
Macro CotanH(Angle)
 
  (((Pow(#E, Angle) + Pow(#E, -Angle))) / ((Pow(#E, Angle) - Pow(#E, -Angle))))
 
EndMacro 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Tangente Hyperbolique <<<<<
 
Macro TanH(Angle)
 
   (((Pow(#E, Angle) - Pow(2.71828182846, -Angle))) / ((Pow(#E, Angle) + Pow(#E, -Angle))))
 
EndMacro
 
 


 
Une petite question à Fred peut-on connaître la structure ERUP ...N° 5 des fichiers *.res dans le répertoire Residents ?
Chacune des entités Structures, Constantes, Interfaces et Macros ont une structure particulière enfin je crois.
A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Répondre