Tailbite : Construire une lib contenant structure et map

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Tailbite : Construire une lib contenant structure et map

Message par falsam »

Bonjour. Je tente de construire une lib contenant une structure et une map faisant référence à cette structure.

Le code étant un peu long je vous donne un code de test

dummy.pbi

Code : Tout sélectionner

Structure Dummy
  x.i
EndStructure

ProcedureDLL GiveResultTable(Y.i, Map Result.Dummy())
  Protected N.i
  For N=0 To 10
    Result("X"+Str(N))\x = N*y
  Next
EndProcedure
et le code qui l'utilise

test.pb

Code : Tout sélectionner

IncludeFile "dummy.pbi"  ;Commenter cette ligne  une fois la lib générée.

Global NewMap Test.dummy()

GiveResultTable(2, Test())

ForEach Test()
  Debug Test()\X
Next
Une fois enregistré sans utiliser tailBite, le code de test fonctionne.

Par contre quand j'utilise TailBite, ma lib est bien créee par contre l’exécution du code de test me génère l'erreur Structure introuvable dummy

Il me semblait pourtant qu'on pouvait déclarer une structure en dehors des procédures.
Une autre précision j'ai bien pensé à redémarrer le compilateur après la génération de la lib.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Tailbite : Construire une lib contenant structure et map

Message par falsam »

Merci de te pencher sur mon souci Spock :) C'est ce que j'ai vu dans la doc de tailbite

Code : Tout sélectionner

ProcedureDLL MyLib_Init()
     ; Do some initializing stuff, allocate memory, etc.
EndProcedure

ProcedureDLL MyLib_End()
     ; Do some cleaning, free memory, unload third party DLLs, etc.
EndProcedure
j'ai modifié le code en conséquence.

Code : Tout sélectionner

ProcedureDLL Malib_Init()
  Structure Dummy
    x.i
  EndStructure
EndProcedure

ProcedureDLL GiveResultTable(Y.i, Map Result.Dummy())
  Protected N.i
  For N=0 To 10
    Result("X"+Str(N))\x = N*y
  Next
EndProcedure
mais j'ai le même message d'erreur : Structure introuvable Dummy

Bien entendu j'ai relancé TailBite ainsi que le compilateur à l'issu de la génération de la lib.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Tailbite : Construire une lib contenant structure et map

Message par falsam »

Spock a écrit :du reste , je ne suis pas sur que tu puisse utiliser une structure qui se trouve dans une Dll ....
Effectivement si je declare à nouveau cette structure dans le code qui fait appel à la lib alors dans ce cas ça fonctionne.

Code : Tout sélectionner

Structure Dummy
  x.i
EndStructure

Define NewMap Test.Dummy()

GiveResultTable(2, Test())

ForEach Test()
  Debug test()\x
Next
mais j'aurais préféré ne pas avoir à déclarer à nouveau cette structure. Une instanciation aurait était préférable étant donné que cette structure existe déja dans la lib. :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Tailbite : Construire une lib contenant structure et map

Message par falsam »

Spock a écrit :j'aurai codé une ou des fonctions dans la lib , qui accéde a une liste chainé structuré (ou map) ou un tableau de cette lib
qui la remplis la modifie .... et éventuellement me renvoie un résultat ...
C'est ce que je fais dans cette lib de test qui renvoie la table de multiplication du nombre qu'elle reçoit.

En tout cas merci encore de t'être pencher sur mon souci :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Tailbite : Construire une lib contenant structure et map

Message par SPH »

Je serais pour voir un tuto sur ce qu'est une lib , comment le faire et comment l'utiliser :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Tailbite : Construire une lib contenant structure et map

Message par falsam »

Pure Basic utilise des libraries qui se trouvent dans le dossier PureLibraries du dossier d'installation de Pure basic.

Ce dossier contient un sous dossier qui se nomme UserLibraries dans lequel tu peux placer tes propres librairies.

:arrow: Comment générer sa propre library ?
Au préalable il faut installer un utilitaire capable de generer une library. Tu peux installer par exemple le logiciel TailBite Version 1.4.11 que tu trouveras sur le site de l'auteur en cliquant sur ce lien. http://www.tailbite.com

Après avoir exécuter TailBite_installer, il faudra installer l’exécutable (TailBite.exe) dans les outils personnalisés de Pure Basic.
■ Menu Outils -> Outils Personnalisés
■ Bouton nouveau
Ligne de commande : Allez chercher TailBite.exe qui est en principe installé dans le dossier d'installation de Pure Basic
Argument : "%FILE" "%TEMPFILE"

Valider en cliquant sur le bouton Ok et c'est tout pour ce préalable.

:arrow: Votre premier code.
A titre d'exemple nous allons faire une library qui contiendra une procédure dont l'objectif est d’additionner deux nombres.

Math2.pb

Code : Tout sélectionner

ProcedureDLL Add(X.i, Y.i)
  Protected Result.i
  
  Result = X+Y
  
  ProcedureReturn Result
EndProcedure
Enregistrer ce code sous le nom de Math2.pb par exemple.
Lancer maintenant TailBite depuis les menu Outils. Ne renseignez pas le fichier d'aide et et laisser le travailler quelques secondes. C'est terminé.

:arrow: Voyons voir si cette lib fonctionne.
■ Vous pouvez verifier que la lib MathDemo fraîchement générée se trouve bien dans le dossier UserLibrairies du répertoire d'installation de Pure Basic.

Redémarrer votre compilateur depuis le menu Compilateur.

Code à tester.

Code : Tout sélectionner

Debug Add(2,3)
ça fonctionne ? Bravo :) Vous allez pouvoir implanter une deuxième procédure dans votre programme.

N'oubliez pas de relancer Tailbite à chaque fois que vous modifiez votre code et de redémarrer aussi le compilateur à l'issu de la génération de la library.
Dernière modification par falsam le dim. 29/déc./2013 14:04, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: Tailbite : Construire une lib contenant structure et map

Message par Atlante »

@falsam :
Tutorial créé suite à ce post très intéressant.
http://www.purebasic.fr/french/viewtopi ... 21&t=13789
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Tailbite : Construire une lib contenant structure et map

Message par falsam »

J'ai eu une réponse sur le forum anglais.
Spock a écrit :je ne suis pas sur que tu puisses utiliser une structure qui se trouve dans une Dll ....
Si tu peux en créant un resident que tu génères avec TailBite.

Tu crées un fichier qui ne contiendra que la structure de ton programme et que tu compile avec TailBite. Le résultat de la génération sera dans le dossier Residents de ton dossier d'installation de Pure Basic.

Petite demonstration par l'exemple :
■ 1 - DummyS.pb qui contiendra la structure à compiler avec TailBite : dummys.res est généré

Code : Tout sélectionner

Structure Dummy
  x.i
EndStructure
■ 2 - Dummy.pb Votre library (Sans la structure) à compiler avec TailBite : dummy (library) est généré

Code : Tout sélectionner

ProcedureDLL GiveResultTable(Y.i, Map Result.Dummy())
  Protected N.i
  For N=0 To 10
    Result("X"+Str(N))\x = N*y
  Next
EndProcedure
■ 3 - Important redémarrer votre compilateur (menu compilateur)

■ 4 - Test.pb

Code : Tout sélectionner

NewMap  Result.dummy()

GiveResultTable(4, Result())

ForEach Result()
  Debug Result()\x
Next
FAQ :
Ou se trouve ma library ? : Dans votre installation de Pure Basic\PureLibraries\UserLibraries
Ex : C:\Program Files (x86)\PureBasic520\PureLibraries\UserLibraries

Ou se trouve mon resident ? : Dans votre installation de Pure Basic\PureLibraries\PureBasic520\Residents
Ex : C:\Program Files (x86)\PureBasic520\Residents

Ou puis je trouver TailBite ? : http://www.tailbite.com
Dernière modification par falsam le dim. 14/juil./2013 10:53, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Tailbite : Construire une lib contenant structure et map

Message par Backup »

cool :)
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Tailbite : Construire une lib contenant structure et map

Message par PAPIPP »

Bonjour à tous
Les éléments suivant sont à placer dans le répertoire RESIDENT. Ils ne peuvent être compilés.
Les fichiers résidents du répertoire RESIDENTS sont des informations non compilées des 5 types d’objets nécessaires à PB.
Nous pouvons nous même installer un de ces types dans le fichier résident avec pbcompiler.exe option /RESIDENT voir doc.
Nous trouvons dans ces fichiers résidents:
Les Constantes.
Les Structures.
Les interfaces.
Les Macros.
Les Prototypes.

Les procédures peuvent être compilées avec tailBite et l’autre partie avec pbcompiler /RESIDENT
Voici à titre d’exemple un programme pour faciliter le placement en RESIDENT

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
  #Text_6
  
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, "LIBRAIRIE PB COMPILER", #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))
    TextGadget(#Text_6     , 10, 150, 430, 50, "",#PB_Text_Border);,#PB_Text_Border)
    ButtonGadget(#Button_11, 450, 155, 100, 30, "Création du Batch")
    ButtonGadget(#Button_12, 570, 155, 100, 30, "OK Créez")
    ButtonGadget(#Button_13, 690, 155, 100, 30, "Terminer")
    
  EndIf
EndProcedure
  
OpenWindow_Window_0()
  
  ;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
      ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
     Select  EventGadget
    Case #String_0
    Case #String_2
    Case #String_5
      PathFil_Res$=GetGadgetText(#String_5)
    Case #Text_0
    Case #Text_2
    Case #Text_5
      ;************************************************************** BOUTON  Parcourir LIB PB ***********************************************************      
      
    Case #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 ********************************      
      
    Case #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
      ;  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 ********************************      
      
    Case #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
    Case #Editor_41
      ;            Debug event
      ;************************************************************** BOUTON  Création du Batch ***********************************************************      
    Case #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 ***********************************************************      
  Case #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)
    If k>1
     fic1$=fic$(k-2)
    EndIf 
  EndIf
If RTrim(LTrim(UCase(fic$(k-1))))="/RESIDENT"
    fic3$=fic$(k)
  EndIf
Next
fic1$=RTrim(LTrim(fic1$))
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
 If fic2$<>fic1$
;                                                                                     123456789012345678901234567890123456  1234567890123456789012345678901234567890
;   SetGadgetColor(#Text_6, RGB(255, 0, 0), #PB_Gadget_FrontColor)
  SetGadgetText(#Text_6, "Fichier de controle différent du fichier à supprimer"+Chr(10)+" fichier Controle     "+fic1$+Chr(10)+" fichier à supprimer "+fic2$)
  Coul_t = GetGadgetColor(#text_6, #PB_Gadget_FrontColor)
  Coul_f = GetGadgetColor(#text_6, #PB_Gadget_BackColor)
  SetGadgetColor(#Text_6, #PB_Gadget_BackColor, RGB(0,0,$CE))
  SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,RGB(255,255,0))

  
;   SetGadgetColor(#Text_6, RGB(255, 0, 0), #PB_Gadget_FrontColor)
  PathFil_Res$=""
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
  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
Case  #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
;       Coul_t = GetGadgetColor("text_6, #PB_Gadget_FrontColor)
;   Coul_f = GetGadgetColor("text_6, #PB_Gadget_backColor)
  SetGadgetText(#Text_6, "")
  SetGadgetColor(#Text_6, #PB_Gadget_BackColor, Coul_f)
  SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,coul_t)

    Else
      Resultat=DeleteFile(fb$)
      CloseWindow(#Window_0)
      Break
    EndIf
    
  EndIf
EndSelect
                                    ; ////////////////////////
Case #PB_Event_CloseWindow
  EventWindow = EventWindow()
If EventWindow = #Window_0
    CloseWindow(#Window_0)
    Break
  EndIf
EndSelect
ForEver
                                ;
Pour ma part à la compilation je sépare les procédures et les 5 éléments définis ci-dessus comme certains auteurs le font (en deux parties).
et je compile les procédures avec tailBite et l’autre partie avec pbcompiler /RESIDENT
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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Tailbite : Construire une lib contenant structure et map

Message par G-Rom »

Spock a écrit :du reste , je ne suis pas sur que tu puisses utiliser une structure qui se trouve dans une Dll ....

pour moi le fonctionnement c'est

les procedures de la DLL peuvent utiliser la Structure de la DLL

mais pas l'utilisateur a l'exterieur de la DLL ...

il faudrait pour ça faire une fonction qui passe l'adresse de la Structure vers l'exterieur de la DLL....

que l'utilisateur recupere , pour ensuite modifier/lire son contenu
y a pas de structures dans une DLL... ni dans un programme d'ailleurs , la dll est compilé , ta structure n'est qu'une aide au programmeur , le compilateur à tout transformé en code machine :D
Répondre