Differents types de librairies ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Differents types de librairies ?

Message par majikeyric »

Salut le forum,

je suis nouveau, cela fait 2 mois que je me suis mis au PB pour sa simplicité et sa puissance.
Je n'ai jamais vraiment developpé avec des librairies sous windows (ou alors c'était transparent).
Je suis un peu perdu dans la doc et le(s) forum(s), dans PB 3 types de librairies sont utilisées ?

- dlls (dynamiques)
- lib (statiques)
- userlibs

C'est ça ?

Toutes peuvent être crées soit en asm,c ou même directement en PB ?

Tailbite permet de générer une userlib à partir d'un fichier PB ?

Il y a une doc avec PB sur le format des userlibs ? noms des fonctions, convention d'appel ?

Il est possible de connaitre à partir d'une fichier librairie seul toutes les fonctions qu'elle renferme ?

N'hesitez pas à m'orienter vers d'autre liens qui pourraient m'éclairer.

Merci de votre compréhension :D

Eric
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Differents types de librairies ?

Message par Fig »

Bienvenue.

Je ne me suis jamais servi de librairies sous Pb, jamais eu l'utilité car il y a déjà beaucoup de commandes incluses (sans compter les Apis nativement accessibles)...
Quel est ton besoin ?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Re: Differents types de librairies ?

Message par Droopy »

Bienvenue, n'oublie pas les modules.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Differents types de librairies ?

Message par Backup »

majikeyric a écrit :dans PB 3 types de librairies sont utilisées ?

- dlls (dynamiques)
- lib (statiques)
- userlibs

C'est ça ?
ouai !
Toutes peuvent être crées soit en asm,c ou même directement en PB ?
non , les Libs statiques et les users lib ne peuvent etre crée en Purebasic ... c'est par l'utilisation de prg externe qui va convertir le code Purebasic
en code compilé pour Librairie Users ..
Tailbite permet de générer une userlib à partir d'un fichier PB ?
oui ! meme mieux , si tu utilises l'editeur JAPBE ou l'editeur EPB tu peux generer ta lib en utilisant Tailbite
directement a partir de ces editeurs .. (donc création de la lib a partir du code que tu edites ...

Il y a une doc avec PB sur le format des userlibs ? noms des fonctions, convention d'appel ?
non , mais plusieurs réponses a ce sujet sur les differents forum (faire recherche )

quoique..... je suis pas sur d'avoir saisi ta question ...
si tu parles de Doc sur "Comment faire une Lib avec tailbite"
la réponses est simple ... comme pour une DLL (voir la Doc )
c'est a dire l'emploi de :

ProcedureDLL(parametre1,2,3 )
code .....
.......
EndProcedure

c'est ce genre de code qu'on donne a manger a Tailbite
(voir sur notre forum les TUtos ) http://www.purebasic.fr/french/viewtopi ... =21&t=6664
notamment le Tuto 8 de la section debutant

Il est possible de connaitre à partir d'une fichier librairie seul toutes les fonctions qu'elle renferme ?
possible pour une DLL a l'aide de certains outils Externe (DLLviewer)
Dernière modification par Backup le dim. 29/déc./2013 14:52, modifié 2 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Differents types de librairies ?

Message par falsam »

Bonjour majikeyric et bienvenue. Je vais tenter de répondre à ta demande.

Que ce soit des Dll ou des librairies, Le code est de même nature que le code PureBasic excepté qu'aucun code ne peut exister en dehors d'une procédure. Lors de l'écriture d'une DLL, tout le code est intégré dans des procédures.

Entrons dans le vif du sujet avec ce code très simple qui va nous servir de base pour créer une DLL et une Library et que tu enregistreras dans le dossier de ton choix sous le nom de madll.pb par exemple.

Code : Tout sélectionner

ProcedureDLL Addition(x,y)
  ProcedureReturn(x+y)
EndProcedure

ProcedureDLL.s ConcateneString(x$, y$)
  ProcedureReturn x$+y$
EndProcedure
:idea: Que ce soit une DLL ou une library, le mot clef ProcedureDLL est utilisé au lieu de Procedure. C'est la seule différence pour écrire un programme.

:arrow: Comment créer une DLL ?
Lorsque le codage de ta ou tes procédures est terminé, il suffit de sélectionner Shared DLL dans la liste déroulante Format de l’exécutable que tu trouveras dans les options du compilateur (Menu Compilateur -> Option du compilateur), puis de créer l’exécutable qui prendra automatiquement l'extension dll dans le même dossier que ton code.

:arrow: Comment accéder à cette DLL ?
Un code suffisamment parlant que tu enregistreras dans le même dossier que ton code précédent.

Code : Tout sélectionner

Enumeration
  #DLLFile
EndEnumeration

If OpenLibrary(#DLLFile, "MaDLL.dll")
  Result=CallFunction(#DLLFile, "Addition", 1,2)  
  Debug Result
  
  Result=CallFunction(#DLLFile, "ConcateneString", @"Toi",@"Moi")  
  Debug PeekS(Result)
  CloseLibrary(#DllFile)
EndIf
:arrow: Comment construire une Library ?
majikeyric a écrit :Tailbite permet de générer une userlib à partir d'un fichier PB ?
Et bien oui :)
Au préalable tu vas devoir installer tailbite. Ayant déjà détailler l'installation dans un autre post, je te donne le lien
http://www.purebasic.fr/french/viewtopi ... 32#p155032

Reprend ensuite le code malib.pb et éxécute maintenant TailBite depuis le menu Outils. Ne renseigne pas le fichier d'aide et et laisse le travailler quelques secondes. C'est terminé. Ta librairie se nomme Madll sans extension et se trouve dans le dossier UserLibraries du dossier d'installation de Pure Basic.

:idea: Ne pas oublier de redémarrer le compilateur : Menu Compilateur -> Redémarrer le compilateur.

:arrow: Comment communiquer avec ma lib ?.
La aussi un code suffisamment parlant.

Code : Tout sélectionner

Debug Addition(2,3)

Debug ConcateneString("Toi", "Moi")
Plus simple qu'avec les DLL :)
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
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Differents types de librairies ?

Message par majikeyric »

Merci beaucoup pour toutes vos réponses et informations 8)

Je n'ai pas encore d'idée précise de lib à developper mais je cherche dejà en a comprendre le fonctionnement.

En fait je cherche aussi à comprendre le fonctionnnement des libs "windows" et de windows en général.

Venant du monde du C64 et de l'amiga, j'ai pratiqué plusieurs assembleurs, j'ai même codé en 80x86 il y a longtemps mais sous Dos. Le seul type de "lib statique" disons que j'utilisais c'était des "modules" .obj que l'on linkés pour obtenir l'exe final.
Pour moi Windows est quelque chose d'opaque, certains langages produisent du code natif, d'autres du code "interprété" (Just In time) et tout ça cohabite.

Je vais m'installer TailBite et faire quelques tests.

Que ce soit pour une userlib ou une dll tout le code doit se trouver à l'intérieur de procédures mais

est-il possible d'avoir des variables "globales" accessibles par toutes les procédures à l'intérieur de la lib ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Differents types de librairies ?

Message par Backup »

majikeyric a écrit : Venant du monde du C64 et de l'amiga, ...............................................
Pour moi Windows est quelque chose d'opaque, certains langages produisent du code natif, d'autres du code "interprété" (Just In time) et tout ça cohabite.
ben c'etait pareil sous les environements 16/32 ...
il existait des interpreteurs , et des compilateurs ... rien ne change en fait !
Que ce soit pour une userlib ou une dll tout le code doit se trouver à l'intérieur de procédures mais

est-il possible d'avoir des variables "globales" accessibles par toutes les procédures à l'intérieur de la lib ?
oui , je pense que oui .. (j'ai pas refait de lib depuis un moment )

en dehors des procedures (en debut de listing par exemple )

que ce soit les DLL ou bien les Users-lib , le traitement est le meme du point de vue programmation
tout ce qui est dans une "ProcedureDLL" est utilisable de l'exterieur (appel de celle-ci par leur nom dans le programme appellant )

mais tu peux aussi inclure des "Procedure" (simple procedure voir doc ) qui seront elles accessible seulement par le code de ta librairie
(reste en interne ) ..impossible a l'utilisateur de faire appel a ces procedures ....

mais quoiqu'il en soit, avec les librairies.. c'est surtout sous forme de constantes que tes "variables" seront utiles ..
les Variables etant volatile (perte de leur valeur ... sauf sauvegarde explicite )
il faut considerer une librairie Utilisateurs ou une DLL comme un gros sous programme remplis de procedures (fonctions)
donc meme global, ça restera LOCAL a la librairie !
ce ne sera Global que pour L'univers de cette Librairie ...
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Differents types de librairies ?

Message par majikeyric »

Je me suis mal exprimé, je voulais dire une variable accessible uniquement dans toute la librairie. Donc ça me convient :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Differents types de librairies ?

Message par Backup »

je te conseil aussi de jetter un oeil a :


Static
Shared

;)
Répondre