Faire une UserLib uniquement en PB

Partagez votre expérience de PureBasic avec les autres utilisateurs.
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Faire une UserLib uniquement en PB

Message par G-Rom »

Après une discutions avec Falsam sur chat sur la création d'une userlib en PB , j'ai décidé de décrire ici le processus de création , je n'apporterais aucun support étant donné que j'écrirais tout ici, si cela ne marche pas chez vous, c'est que vous faite une mauvaise manip. tout d'abord, une UserLib, c'est un peu comme une librairie statique , elle sera "incorporé" dans votre exécutable final , le contraire d'une dll donc.

Tout d'abord, je travail en ligne de commande, le dossier "compiler" de PB et dans le PATH ( windows ou linux , peu importe ), si vous ne savez pas ce qu'est le PATH -> google.
pour tester si cela fonctionne lancé un terminal : win+r , cmd , pbcompiler
en tapant le nom du pré-compilateur pb , vous devriez avoir un truc du genre :
PureBasic 5.60 (Windows - x86) - (c) 2016 Fantaisie Software
...
...
C'est que cela marche.

pré-compilateur ? oui, PB ne compile rien , il transforme le code en ASM, c'est FASM le compilateur, ou la partie arrière de PB... bref... il faut avoir en tête cela. je ne rabaisse pas le travail du code PB vers ASM, c'est complexe à réaliser et très certainement au dessus de vos compétences, mais là n'est pas le sujet.

Donc , pour créer une userlib, il faut des fonctions PB que l'on va exporté comme une DLL : ProcedureDLL

Exemple :

Code : Tout sélectionner

ProcedureDLL.l Add(A.l,B.l)
  procedureReturn A+B
EndProcedure
Rien de compliqué jusque là, créer un fichier PB et collé lui cette procédure dedans, et avec votre terminal, allez dans le dossier ou il y a votre fichier .pb qui contient la/les fonctions.

une fois dans votre dossier ( dans le terminal ) , faite :
pbcompiler VotreFichier.pb /COMMENTED
si il n'y a pas d'erreur , un fichier ASM ( PureBasic.asm ) à été généré.
on va devoir faire 2/3 modif a l'intérieur , rien de bien compliqué, mais il y a deux trois astuce a comprendre.
tout d'abord, les dépendances de votre code, PB le fait de manière automatique, mais comme on casse un peu le "procédé" normal, il va falloir être vigilant.
pour cela, le fichier ASM contient absolument toute les infos que l'on a besoin ( on remercie au passage Fred , qui a commenté les dépendances dans le fichier ASM )
par exemple :

Code : Tout sélectionner

; 
; PureBasic 5.60 (Windows - x86) generated code
; 
; (c) 2016 Fantaisie Software
; 
; The header must remain intact for Re-Assembly
; 
; Requester
; FileSystem
; Date
; Object
; SimpleList
; :System
; kernel32.lib
; :Import
; 
format MS COFF
...
...
...
...
Dans cet entête de fichier ASM , j'ai utilisé la fonction MessageRequester() , qui génère 5 dépendances interne a PB , tout ces noms , Requester, FileSystem , Date, etc... ne sont pas là pour faire joli, même si c'est un commentaire, ces noms représentent des fichiers présent dans PureLibrairie , ce sont les dépendance de votre code , il va falloir noter leurs nombre, & les noms quelque part, on s'en servira après, Les dépendances s'arrête à :System , si vous avez une erreur POLINK, ca viens surement des dépendances, POLINK étant un éditeur de lien.

Une fois cela noté ( correctement et case sensitive... )
il faut partir à la recherche des fonctions ASM que vous avez codé en PB, là encore, Fred à pensé à mettre en commentaire le nom réel de la fonction.
toute les fonctions sont renomé ainsi : _Procedure0: _Procedure1: etc...
Exemple :
;
; ProcedureDLL.l Add(A,B)
_Procedure0:
PUSH ebx
PS2=12
XOR eax,eax
Il faut donc modifier le _Procedure0 par le nom de votre fonction et rajouté le suffixe PB_ devant :
;
; ProcedureDLL.l Add(A,B)
PB_Add:
PUSH ebx
PS2=12
XOR eax,eax
Mais cela ne suffit pas, il faut rendre "visible" cette fonction de l'extérieur , pour cela , une simple ligne de code suffit : "public PB_Add"
;
; ProcedureDLL.l Add(A,B)
public PB_Add
PB_Add:
PUSH ebx
PS2=12
XOR eax,eax
Une fois que vous avez fait vos modification, il faut compilé le code ASM fraichement modifié, pour cela , rien de plus simple , toujours avec le terminal :
fasm PureBasic.asm MonUserLib.obj
si il n'y a pas d'erreur , le fichier MonUserLib.obj à été généré , c'est une lib statique ( utilisable aussi en C d'ailleurs avec un header qui va bien... )
il est temps de passé à la dernière phase, la création d'un fichier de description des fonctions, pour cela vous allez créer un fichier .desc dans le même répertoire que votre code PB , code ASM et librairie .obj , ex : MonUserLib.desc
PB est livré avec un SDK , il y a un fichier Readme.txt qui explique la totalité de la création de ce fichier, là on va se contenté de la fonction Add() que l'on veut rajouté en userlib.

Voici le fichier .desc pour la fonction Add, on peut rajouté autant de fonctions que l'on veut dans le .desc ( attention fichier a case sensitive aussi !! )
ASM
0
OBJ
0

UserLib

Add, Long, Long, (A,B) - Une fonction qui ne sert strictement à rien !
Long | StdCall
Si j'avais rajouté un messagerequester , j'aurais eu des dépendences, là il y en à 0 , on le constate car il y a écrit 0 en dessous de OBJ ( le type de lib )

exemple avec des dépendances :
ASM
0
OBJ
5
Requester
FileSystem
Date
Object
SimpleList
UserLib

Add, Long, Long, (A,B) - Une fonction qui ne sert strictement à rien !
Long | StdCall
Les noms proviennent du fichier ASM.

Dans le dossier SDK de votre PB , il y a librarymaker.exe, lancer le en mode admin, une petite fenêtre va s'ouvrir , et va vous demander de remplir 2 champs, le premier "object path" est le chemin du fichier .obj & .desc , normalement , le même répertoire. le second , c'est l'emplacement des userlib de pb , généralement : "C:\Program Files (x86)\PureBasic\PureLibraries\UserLibraries\"

Coché la case process whole directory , ca évitera des warnings concernant des fonctions "non debug" , puis cliqué sur start, la case de compression peu être coché.
et voila , votre userlib faite uniquement en PB est faite. elle doit apparaitre à son emplacement. lancer PB , si vous êtes déjà dedans relancé le compilateur.
Si vous avez des question concernant le .Desc, merci de lire Readme.txt présent dans le dossier SDK de votre install PB. il est pas là pour rien.
Vous avez toute les armes pour refaire un tailbite opensource.

@++

Edit :
Si vous avez une erreur avec le debbuger lors de l'utilisation de votre lib , renommé votre fichier .obj et votre .desc avec le même nom :

MaLib.obj
MaLib.desc

la doc du readme dit :
The commands available in a PureLibrary are described in a file, called
'LibraryName.Desc'
. Inside, you can put every commands, which langage you've
used to code your library, and more. Every line beginning by a semi-column ';'
is considered as a comment (like in PureBasic).
Dernière modification par G-Rom le jeu. 14/sept./2017 0:44, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Faire une UserLib uniquement en PB

Message par falsam »

Merci pour ce résumé de cette discussion que nous avons eu sur le tchat de purebasic et merci aussi pour le mal de crane :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Faire une UserLib uniquement en PB

Message par Zorro »

Merci pour ces infos

je verrai a l'occase ...
d'autant que mon editeur EPB permet de generer l'ass , et de le ré-assembler :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Faire une UserLib uniquement en PB

Message par cage »

Bonjour,

Intéressant. Merci pour la procédure a suivre.

Je vais tester dés que possible.

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Faire une UserLib uniquement en PB

Message par falsam »

Important : Compiler uniquement en mode Admin (Fenetre de cmd ou powershell)

Utilisateur de Windows 7 8 et 10, si vous ne le faites pas (un oubli ça arrive), le mécanisme de virtualisation prendra le relais et placera vos lib dans un dossier de virtualisation. Le compilateur de Purebasic reconnaîtra ce dossier.

Par la suite vous allez compiler en mode admin et cette fois çi votre lib static s'installera bien dans le dossier userlib se trouvant dans le dossier d'installation normal de PureBasic mais sans le supprimer du dossier de virtualisation.

:!: Vous allez relancer votre compilateur et là le drame, l'IDE Freeze et plus moyen de compiler.
:idea: Dans ce cas allez dans le dossier C:\Users\VotreNomutilisateur\AppData\Local\VirtualStore et n'hésitez pas à supprimer l'installation de votre PureBasic. Il n'y aura aucune conséquence pour votre IDE.

Utilisateurs de SpiderBasic, si vous ne pouvez plus compiler, le souci vient de là aussi.

Profitez en pour faire du ménage dans ce dossier de virtualisation.
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Faire une UserLib uniquement en PB

Message par cage »

Waouh !, il y a du monde dans ce dossier.

On peut tout effacer ???

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Faire une UserLib uniquement en PB

Message par falsam »

cage a écrit :On peut tout effacer ???
Je l'ai fait et pas de souci avec les noms des applis que j'ai noté.
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Faire une UserLib uniquement en PB

Message par Zorro »

chez moi ce dossier est vide ! 8O
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Faire une UserLib uniquement en PB

Message par Kwai chang caine »

Milles merci GRom de partager avec nous la connaissance durement acquise au fil du temps, bien souvent seul et à la sueur de ton front 8)
Ca fait vraiment plaisir de te relire :D
GRom a écrit :on remercie au passage Fred , qui a commenté les dépendances dans le fichier ASM
Ouaih c'est une des nombreuses choses qui m'ont fait tomber amoureux de cet homme....à une époque ou tout est crypté, protégé, caché...etc... :|
Même pas peur le FRED, je l'aime....et toi aussi d'ailleurs :mrgreen:
GRom a écrit :je n'apporterais aucun support étant donné que j'écrirais tout ici, si cela ne marche pas chez vous, c'est que vous faite une mauvaise manip
T'aurais pu rajouter, pour rester dans la coloration Cpl.bator.. "Ou que vous êtes vraiment des burnes, ou des "fainéant" qui ne veulent pas se sortir les doigts du cul pour progresser" :lol: :lol:
On reconnait bien là, le petit professeur chétif, les lunettes au bout du nez, malmené par ses élèves lorsqu'il leurs tourne le dos au tableau, à coups de feuilles d'arbres sournoisement formées en boulettes ou bien en avion blanc furtif, et quant même toujours prêt malgré sa peur incommensurable, à donner de lui même :lol: :lol:

Sincèrement c'est super généreux d'avoir cherché une méthode pour nous faire comprendre ce mécanisme au combien secret qu'est la création des UserLib PB 8)
C'est très intéressant...j'essaierais des que possible de fusiller mon IDE :oops: :lol:

Au plaisir toujours sincère de te relire, même si c'est pas pour nous aider, tu nous a tant manqué :wink:

Ton fan
Kcc
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Faire une UserLib uniquement en PB

Message par microdevweb »

Merci G-rom,

cell peut'être utile
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Faire une UserLib uniquement en PB

Message par Ar-S »

Merci G-ROM pour ce tuto.
Zorro a écrit :chez moi ce dossier est vide ! 8O
Si comme je te connais tu as désactivé l'UAC et que tu es admin, ceci explique surement cela 8)
~~~~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
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Faire une UserLib uniquement en PB

Message par celtic88 »

..sujet intéressant 8)

j'utilise cette méthode pour générer des shellcodes purement programmer avec #Pb..., et pour ca je suis addict a #Pb :p
.....i Love Pb :)
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Faire une UserLib uniquement en PB

Message par Zorro »

@Ar-s exacte !! :lol:
(tin, je deviens prévisible :lol: )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Faire une UserLib uniquement en PB

Message par G-Rom »

Kwai chang caine a écrit : On reconnait bien là, le petit professeur chétif, les lunettes au bout du nez, malmené par ses élèves lorsqu'il leurs tourne le dos au tableau, à coups de feuilles d'arbres sournoisement formées en boulettes ou bien en avion blanc furtif, et quant même toujours prêt malgré sa peur incommensurable, à donner de lui même :lol: :lol:
Heu... je suis loin d'être chétif a lunette :lol:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Faire une UserLib uniquement en PB

Message par Zorro »

mais si, mais si :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre