Création d'une librairie

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Création d'une librairie

Message 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 :)
Dernière modification par Dräc le sam. 04/déc./2004 14:56, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Création d'une librairie

Message 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.
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message 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...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message 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 :wink:
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
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Je crois avoir trouvé quelque chose ici
http://purebasic.hmt-forum.com/viewtopi ... +purebasic
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

J'ai lu en diagonale et ca n’a vraiment pas l'air trivial cette affaire!
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message 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+
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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. :D
Répondre