Créer une librairie autrement que avec TailBite

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Créer une librairie autrement que avec TailBite

Message par microdevweb »

Pourquoi?
Parce que je voudrai créer une librairie avec des modules (si cela est évidement possible)

Pourquoi des modules? Parce que c'est un peut du style POO, et je voudrais me créer un Gadget du type ZoneRépétée Windev que j’appelais comme suit

Code : Tout sélectionner

OpenWindow(0,0,0,800,400,"Teste",#PB_Window_Maximize|#PB_Window_SystemMenu)
ZoneRepette::CreateZoneRepetee(1,0,0,200,200,50)
ZoneRepette::AddGadget(1,0,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       10,10,100,30)
ZoneRepette::AddGadget(1,1,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       110,10,100,30)
ZoneRepette::AddGadget(1,2,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       210,10,100,30)
ZoneRepette::AddGadget(1,3,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       310,10,100,30)
ZoneRepette::AddGadget(1,4,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       410,10,100,30)
ZoneRepette::AddGadget(1,5,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
                       510,10,100,30)
petit exemple si je fait ceci

Code : Tout sélectionner

DeclareModule Teste
      Declare Aff()
EndDeclareModule
Module Teste
      Global teste$="Coucou"
      Procedure Aff()
            MessageRequester("Info",teste$)
      EndProcedure
EndModule
je lance Tailbite et j'ai FAsm: Shared\Aff.asm Error Line no:15 Error code:-122 Erros String: UNDEFINED_SYMBOL

C'est le "Global" qui coince

Si évidement j’enlève le "Global" cela fonctionne, mais dans l'ide j'ai bien mon module et sa procédure Teste::Aff(), mais lorsque je lance le compilateur ERREUR Module introuvable Teste, de toute manière mon messagerequester m'aurais afficher un beau message vide

Alors voila ma question, y à t'il moyen de créer des librairie avec des modules ?

Merci d'avance
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Créer une librairie autrement que avec TailBite

Message par Backup »

je sais pas ...
mais il me semble qu'une librairie faite avec tailbite
doit avoir une architecture basé sur les ProcedureDLL()


les Modules, c'est une autre façon de faire des librairies.. mais sans Tailbite

des librairies "open sources" ........

mais je peux me tromper .... en ce moment, ça m'arrive :mrgreen:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Créer une librairie autrement que avec TailBite

Message par Ar-S »

Il me semble que tu as raison.
Les Modules permettent un accès aux sources (et par la même occasion de n'utiliser que ce dont on a besoin dans une grosse lib), une lib taillebite est un DLL de fonctions perso compilées que tu fournis avec ton exe. Le seule mod que j'ai utilisé est celui de la DroopyLib qui permet justement d'extraire seulement les fonctions dont on a besoin.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer une librairie autrement que avec TailBite

Message par G-Rom »

vous êtes a coté de la plaque les gars, les modules sont une spécificité PB , rien à voir avec des librairie compilé ( dll / so ).
un module est semblable au namespace du c++ , et le module permet de rendre privée certaine chose au programmeur.
je vous retourne vers la doc & google, j'ai pas le temps de m’étaler plus que cela ^^


@++
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Créer une librairie autrement que avec TailBite

Message par graph100 »

Ar-S a écrit : une lib taillebite est un DLL de fonctions perso compilées que tu fournis avec ton exe.
si je me trompe pas, les fichiers lib ne sont pas comparables aux DLL, car tu n'as pas besoin de fournir un autre fichier pour supporter ton exécutable, et 2èment uniquement les fonctions nécessaires sont inclues dans le programme lorsqu'elle proviennent d'une librairie !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Créer une librairie autrement que avec TailBite

Message par microdevweb »

Daccord avec G-Rom, ce qui pratique dans les module c'est que comme en objet on peut rendre des structure, variable, procédure invisible a l'utilisateur. De plus dans l'ide vous tapez le nom du module:: et seule les procédure seront accessible, donc gain de temps.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Créer une librairie autrement que avec TailBite

Message par Ar-S »

graph100 a écrit :
Ar-S a écrit : une lib taillebite est un DLL de fonctions perso compilées que tu fournis avec ton exe.
si je me trompe pas, les fichiers lib ne sont pas comparables aux DLL, car tu n'as pas besoin de fournir un autre fichier pour supporter ton exécutable, et 2èment uniquement les fonctions nécessaires sont inclues dans le programme lorsqu'elle proviennent d'une librairie !
Oui je me mélange les pinceaux avec la creation de dll et de lib MeaCulpa. :?
Par contre méfie quand tu dis que "uniquement les fonctions nécessaires sont inclues dans le programme lorsqu'elle proviennent d'une librairie". Il me semble qu'il y a pas mal de temps, la droopylib (par exemple), contenant des commandes de registres et autres engendraient un exe en faux positif, et cela même en utilisant une fonction non "sensible". A vérifier aujourd'hui.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Créer une librairie autrement que avec TailBite

Message par Mesa »

Il y a une erreur avec global dans le code

Code : Tout sélectionner

DeclareModule Teste 
	Declare Aff() 
EndDeclareModule 

Module Teste 
	Global teste$="Coucou" ;-->Erreur
	Procedure Aff() 
	MessageRequester("Info",teste$) 
	EndProcedure 
EndModule 
La définition "Global" n'a de sens que dans le bloc "DeclareModule/ EndDeclareModule ", voir la doc.

On peut faire comme ça :

Code : Tout sélectionner

Global var_global$="Global Appli"

DeclareModule Test
  texte$="Coucou Module" ; Equivalent de Global dans un module seulement, quand c'est déclaré dans DeclareModule
  Global var_global$="Global Module"
  Declare Aff()
EndDeclareModule

Module Test		
  Procedure Aff()
    MessageRequester("Info", Test::texte$)
    MessageRequester("Info", var_global$)
  EndProcedure
EndModule

Debug Test::texte$         ;-> Affiche "Coucou Module"
Debug var_global$           ;-> Affiche "Global Appli"
Debug Test::var_global$    ;-> Affiche "Global Module"

Test::Aff()
;-> Affiche "Coucou Module"
;-> Affiche "Global Module"
Ou comme ça :

Code : Tout sélectionner

Global var_global$="global"

 ; Le module commun, qui sera utilisé par d'autres modules afin de partager des données
  ; ------------------------------------------------------------------------------------
  DeclareModule Commun
    Global var_global$="global"
  EndDeclareModule
  
 Module Commun 
 EndModule
 
 DeclareModule Test1
   Declare Aff()
  EndDeclareModule
  
  Module Test1
    UseModule Commun
    var_global$="Test1" 
 Procedure Aff()
    MessageRequester("Info", var_global$)
  EndProcedure
  EndModule
  
   DeclareModule Test2
   Declare Aff()
 EndDeclareModule
 
  Module Test2
    UseModule Commun
    var_global$="Test2"  
 Procedure Aff()
    MessageRequester("Info", var_global$)
  EndProcedure
EndModule

Debug var_global$           ;-> Affiche "global"
Debug Commun::var_global$   ;-> Affiche "Test2"
;Debug Test1::var_global$   ;-> Erreur car absente de "DeclareModule Test1"
;Debug Test2::var_global$   ;-> Erreur car absente de "DeclareModule Test2" 
Test1::Aff()                ;-> Affiche "Test2"
Test2::Aff()                ;-> Affiche "Test2"

; => var_global$ agit comme une variable globale à l'intérieur du module.


M.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Créer une librairie autrement que avec TailBite

Message par microdevweb »

Merci mesa pour c'est infos
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Créer une librairie autrement que avec TailBite

Message par Backup »

G-Rom a écrit :vous êtes a coté de la plaque les gars, les modules sont une spécificité PB , rien à voir avec des librairie compilé ( dll / so ).
un module est semblable au namespace du c++ , et le module permet de rendre privée certaine chose au programmeur.
je vous retourne vers la doc & google, j'ai pas le temps de m’étaler plus que cela ^^


@++
je sais pas si tu m'a inclu dans ton "les gars..."

mais moi j'ai bien ecris
mais il me semble qu'une librairie faite avec tailbite
doit avoir une architecture basé sur les ProcedureDLL()
ce qui ne signifie pas qu'une Dll est un librairie Purebasic , mais que pour faire une librairie avec Taillbite
il faut utiliser une collection de ProcedureDLL() ... :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Créer une librairie autrement que avec TailBite

Message par falsam »

J'espére que je ne suis pas inclus dedans non plus ha ha ha :mrgreen: Dobro parfois tu m'étonnes .... ou alors tu vieillis mal :wink:
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: Créer une librairie autrement que avec TailBite

Message par Backup »

non , je ne vielli pas mal , microdevweb a changé son premier message
il disait qu'il voulait a l'aide de Tailbite faire une librairie en utilisant les Modules !

c'est pour ça que je parle de Tailbite d'ailleurs ...

évidement , maintenant qu'il a modifié son message , ma réponse parait a coté de la plaque :roll:

et me fait ranger microdevweb dans mon tiroir "G-Romesque" ;)
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Re: Créer une librairie autrement que avec TailBite

Message par Droopy »

J'ai abandonné Tailbite pour les modules dans la dernière DropyLib :wink:
TailHmod permet d'avoir une aide associée et contextuelle.
Bon désolé pour cet instant de publicité :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Créer une librairie autrement que avec TailBite

Message par Backup »

Droopy a écrit :TailHmod permet d'avoir une aide associée et contextuelle.

d'ailleurs a ce propos, tu pourrai peut etre faire un topic consacré a TailHmod
car pour ne rien te cacher , je n'ai ni compris a quoi ça sert, ni comment on s'en sert :)

je me dis que je dois donc pas etre le seul .... quoique ? .. :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer une librairie autrement que avec TailBite

Message par G-Rom »

@Dobro, je ne parlais pas de cela & pas de toi.
Quand tu fait une librairie avec pierre paul ou jacques comme outils , tes structures , tes variables, tes modules , ne sont plus visible dès lors que tu utilises la librairie compilé ( dll ou lib pb ), les lib PB sont d'ailleurs des librairies statique, seul les fonctions utilisé sont dans l’exécutable finale.
Pour avoir accès à des modules , des structures , issue d'une librairie , il faut fournir avec la librairie un "header" , comme dans la plupart des langages. tout simplement.


@++
Répondre