Page 1 sur 1
Création d'une librairie
Publié : sam. 04/déc./2004 13:55
par Dräc
J’ai voulu voir comment on crée une librairie, s’agissant grossièrement de changer Procedure par ProcedureDLL
J’ai donc pris cet exemple :
Pour le fichier DLL:
Code : Tout sélectionner
ProcedureDLL inittest()
OpenConsole()
EndProcedure
ProcedureDLL test()
PrintN("coucou")
EndProcedure
et pour le code test, les lignes suivantes:
Code : Tout sélectionner
Library = OpenLibrary(#PB_Any, "C:\Program Files\PureBasic\PureLibraries\UserLibraries\test.dll")
CallFunction(Library, "inittest")
If OpenWindow(0, 10, 10, 300,200, #PB_Window_ScreenCentered ,"test librairie")
CallFunction(Library, "test")
Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
La DLL, je la compile avec l’option de compilation qui va bien de PB et ca marche bien sur
Cependant, je pensais qu’il suffisait de placer la librairie dans UserLibraries de PB pour ne pas avoir a faire des CallFunction.
Ce n'est apparement pas le cas. Comme y arrive t’on ?
Autre chose, j’ai testé TailBite et il refuse de compiler cette librairie et affiche le message d’erreur suivant :
flat assembler version 1.56
TBTemp\Functions\testShared.asm [5]:
Public align 4
Error: reserved word used as symbol.
Que représente « align 4 » dans le code assembler ?
Quel est, selon vous, le remède ?
Je pense qu'un Tuto à ce sujet serait interessant

Publié : sam. 04/déc./2004 14:01
par Le Soldat Inconnu
ça ce compile très bien chez moi avec TailBite, tes 2 procedures et le code marche
mets à jour ta version de TailBite
Re: Création d'une librairie
Publié : sam. 04/déc./2004 14:58
par Anonyme2
Dräc a écrit :
Que représente « align 4 » dans le code assembler ?
Quel est, selon vous, le remède ?
Je pense qu'un Tuto à ce sujet serait interessant

alig 4 est l'appel d'une macro d'alignement des données sur 4 octets pour éviter le chargement avec des adresses impaires qui prennent 2 cycles au lieu d'un.
Ce ne peut pas être une directive Public, c'est surement comme le dit Régis une ancienne version de Tailbite.
Pour le Tuto demande à El_Choni de le faire pusique c'est lui qui a créé ce très utile programme. Ou alors il faut suivre le débaut sur le forum anglais.
Publié : sam. 04/déc./2004 15:58
par Dräc
L’idée d’un tutorial ne s’appliquait pas directement à l’utilisation de TailBite.
Le fichier d’aide de TailBile est là pour cela et il répond déjà à beaucoup de questions,
dont celle de comment disposer d’un nbre d’arguments variables dans une procedure.
Je cherche en fait le moyen d'éviter l’emploie de OpenLibrary et de CallFunction pour utiliser une librairie?
Pour moi, il suffisait de mettre sa librairie dans UserLibraries, correcte ?
PS : Pour ma version de TailBite, je l’ai téléchargée récemment sur PureArea. C’est la 1 .1PR 1.0 datant de fin avril 2004 et franchement pour mon exemple de librairie j’ai fais simple !
Ca devrait marcher normalement…
D’autre part, impossible de charger pour l’instant la derniere version Beta! A suivre...
Publié : sam. 04/déc./2004 16:09
par Anonyme2
Une librairie purebasic n'est absolumen t pas une Dll et il n'y a pas besoin de OpenLibrary et de CallFunction pour utiliser une librairie purebasic, qu'elle soit "officielle" ou écrite par un codeur. La librairie génerera du code direct dans le code du fichier final.
Pour les multi arguments, j'ai pas utilisé Tailbite depuis longtemps et je n'ai pas suivi le débat.
Régis à posté un exemple hier ou il y a peu pour mettre plusieurs arguments;
il faut absolument une version de Tailbitre récente pour pouvoir l'utiliser en toute sécurité et sans plantage.
Publié : sam. 04/déc./2004 16:17
par comtois
tout est dans l'aide de tailbite

pour récupérer la dernière version , le mieux c'est d'aller sur le site de El chroni .
You can make your function accept variable arguments. To do so, you must include two or more ProcedureDLL's with the same name and an index number:
ProcedureDLL MyFunction(arg1, arg2)
result = Pow(arg1, arg2)
ProcedureReturn result
EndProcedure
ProcedureDLL MyFunction2(arg1, arg2, arg3)
result = Pow(arg1, arg2)/arg3
ProcedureReturn result
EndProcedure
To be considered as different versions of the same function with different argument number, the arguments names and types must coincide between them; otherwise, both functions will be considered different functions and processed that way.
After the library is made, and the compiler restarted from the PureBasic editor, if you type MyFunction( in the PureBasic editor, the status window will show:
MyFunction (arg1, arg2 [, arg3])
And you'll be able to call the function with two or three arguments. You can make as many versions as you want, with a different number of arguments, as long as you follow the mentioned rules.
Publié : sam. 04/déc./2004 16:38
par Dräc
@Denis
Ma question sera donc toute bete: comment crée t-on une librairie purebasic (=librairie statique en oppositions à une dll) ?
L'aide PB parle des dll, des residents, mais je ne trouve rien sur la librairie statique. Ca doit y etre, mais il me manque un déclic...
@Tous
Relisez bien mon message, je ne cherche pas a savoir comment utiliser les multi-argument, au contraire, je dis que meme l'aide de la version 1.1 traite du sujet
Publié : sam. 04/déc./2004 16:49
par Dräc
Publié : sam. 04/déc./2004 17:09
par Dräc
J'ai lu en diagonale et ca n’a vraiment pas l'air trivial cette affaire!
Publié : sam. 04/déc./2004 17:25
par Le Soldat Inconnu
La 1.1 (comme tu dis avoir) ne marche pas avec la version de PB actuelle car y'a du changement au niveau du linker je crois
il faut absolument la dernière version (1.2 qulelquechose)
Publié : sam. 04/déc./2004 17:38
par Dräc
Oui, je confirme qu’avec la dernière version de TailBite ca marche ! Ouf !
Merci pour les réponses et merci surtout à El_Choni pour cet outil facilitant considérablement la tache...
A+
Publié : sam. 04/déc./2004 19:33
par Anonyme2
Dans le Dossier
Library SDK il y a des outilis pour faire des trucs et il y a un fichier en anglais
Readme.txt
qui donne des pistes pour faire des librairies sans Tailbite (asm ou c) et il y a des fichiers d'exemples.
C'est assez succint mais Fred répond aux questions.
