creation tuto DLL
creation tuto DLL
Bonjour,
Je programme des outils plutot orientés compta et math et je passe mon temps a recopier mes fonctions dans mes programmes. J'ai lu quelque part que plutot de faire ça, on pouvait creer des DLL que l'on appel pour faire les calculs demandés. J'ai regardé partout sur les aides, et ce forum et je ne trouve rien de claire à ce sujet. On est toujours dans le vague, avec des bouts de script inutilisables.
Je m'explique : j'aimerai creer une DLL qui retourne un montant de TTC grace à 2 paramtres lancé a partir de mon programme.
Voici ce que j'ai ecris :
1. ma DLL
--------------------------------------
ProcedureDLL Calcul_TTC(ht, tx)
ttc = ht * tx
ProcedureReturn ttc
EndProcedure
--------------------------------------
2.
; Voici le programme client qui utilise la DLL
-----------------------------------------------------
ht= 100
tx = 0.196
If OpenLibrary(0, "CalTTC.dll")
CallFunction(0, Calcul_TTC,ht, tx)
CloseLibrary(0)
EndIf
Debug ttc
---------------------------------------------------------
J'ai beau faire ca ne fonctionne pas !
est-ce que quelqu'un est capable de faire un petit tuto simple avec des exemple comme celui-ci tres simples mais qui fonctionne ?
Un grand merci pour ce bon sauveur.
Je programme des outils plutot orientés compta et math et je passe mon temps a recopier mes fonctions dans mes programmes. J'ai lu quelque part que plutot de faire ça, on pouvait creer des DLL que l'on appel pour faire les calculs demandés. J'ai regardé partout sur les aides, et ce forum et je ne trouve rien de claire à ce sujet. On est toujours dans le vague, avec des bouts de script inutilisables.
Je m'explique : j'aimerai creer une DLL qui retourne un montant de TTC grace à 2 paramtres lancé a partir de mon programme.
Voici ce que j'ai ecris :
1. ma DLL
--------------------------------------
ProcedureDLL Calcul_TTC(ht, tx)
ttc = ht * tx
ProcedureReturn ttc
EndProcedure
--------------------------------------
2.
; Voici le programme client qui utilise la DLL
-----------------------------------------------------
ht= 100
tx = 0.196
If OpenLibrary(0, "CalTTC.dll")
CallFunction(0, Calcul_TTC,ht, tx)
CloseLibrary(0)
EndIf
Debug ttc
---------------------------------------------------------
J'ai beau faire ca ne fonctionne pas !
est-ce que quelqu'un est capable de faire un petit tuto simple avec des exemple comme celui-ci tres simples mais qui fonctionne ?
Un grand merci pour ce bon sauveur.
Bonjour et bienvenu.
utilise les balise [ code ] [ /code ] pour mettre du code.
l'erreur est ici
Calcul_TTC vaut 0 , le second paramètre demande un nom de fonction
donc
Ton resultat est dans le retour de la fonction donc :
utilise les balise [ code ] [ /code ] pour mettre du code.
Code : Tout sélectionner
CallFunction(0, Calcul_TTC,ht, tx)
Calcul_TTC vaut 0 , le second paramètre demande un nom de fonction
donc
Code : Tout sélectionner
CallFunction(0,"Calcul_TTC",ht, tx)
Code : Tout sélectionner
RESULTAT.f = CallFunction(0, Calcul_TTC,ht, tx)
debug RESULTAT.f
merci pour ta reponse mais....
je te remercie pour ta reponse et l'attention que tu portes a ma question j'ai donc appliqué tes consignes. néanmoins le probleme subsite.
si je ne mets pas de guillemets dans l'appel de ma fonction j'ai un message d'erreur a la compitaion de mon programme car il attends un string
est-ce que j'oublie quelque chose ?
si je ne mets pas de guillemets dans l'appel de ma fonction j'ai un message d'erreur a la compitaion de mon programme car il attends un string
Code : Tout sélectionner
ht= 100
tx = 0.196
If OpenLibrary(0, "CalTTC.dll")
RESULTAT.f = CallFunction(0, Calcul_TTC,ht, tx)
CloseLibrary(0)
EndIf
Debug RESULTAT
Oui, les basesest-ce que j'oublie quelque chose ?

tu déclare tx = 0.196
tx est une variable de type integer , toi tu lui passe un float < à 1 donc , déjà lui il vaut 0. 100*0 = 0
pareil pour les fonctions , tu travail en flottant , il faut l'indiqué lors de la déclaration des variables.
DLL :
ProcedureCDLL.f Calcul_TTC(ht.f, tx.f)
ttc.f = ht * tx
ProcedureReturn ttc
EndProcedure
le code :
Code : Tout sélectionner
ht.f= 100
tx.f = 0.196
Prototype.f Calcul_TTC(ht.f, tx.f)
If OpenLibrary(0, "CallTTC.dll")
Calcul_TTC.Calcul_TTC = GetFunction(0,"Calcul_TTC")
EndIf
Debug Calcul_TTC(ht,tx)
ca marche

Ah le Bator qu'il est fort
(désolé) 


~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: creation tuto DLL
bourdon a écrit :J'ai lu quelque part que plutot de faire ça, on pouvait creer des DLL que l'on appel pour faire les calculs demandés. J'ai regardé partout sur les aides, et ce forum et je ne trouve rien de claire à ce sujet. On est toujours dans le vague, avec des bouts de script inutilisables.
ce genre d'affirmation , m'enerve grave les nerfs !!
et la c'est quoi La ???
LE tuto numero 1
http://www.purebasic.fr/french/viewtopic.php?t=6664
yen a j'vous jure !

pour rappel on est pas a ton service, rien ne t'empeche de bosser le sujet
et d'en faire un de Tuto
pour qu'un poireau dans ton genre te fasse remarquer quelque temps apres
que ton tuto , c'est du vague !!

un grand merci a bator
Merci tu es vraiment très sympa.
je vais essayer tous ca.
je ne prend pas la peine de répondre au dernier post qui m'insulte de poireau et autre noms d'oiseau je pense que cela n'en vaut pas la peine. A part que cela vous dégoute d'echanger avec d'autre internautes. Heureusement qu'il y a des gens inteligents qui ne se precipitent pas sur la premiere occasion possible pour faire remarquer aux autres à quel point ils sont nulls.
encore grand merci à cpl bator
je vais essayer tous ca.
je ne prend pas la peine de répondre au dernier post qui m'insulte de poireau et autre noms d'oiseau je pense que cela n'en vaut pas la peine. A part que cela vous dégoute d'echanger avec d'autre internautes. Heureusement qu'il y a des gens inteligents qui ne se precipitent pas sur la premiere occasion possible pour faire remarquer aux autres à quel point ils sont nulls.
encore grand merci à cpl bator
Toujours pas
J'ai testé ton script en recopiant ta DLL et le prog.
en copier collé
mais rien à faire !
le debugger m'affiche l'erreur suivante [error] invalid memory access, (read error at adress 0)
!??? Etant vraiment tres novice en matiere de DLL, je pense que j'oublie certainement quelquechose. Encore une fois je m'en remets à ta patience.
merci
en copier collé
mais rien à faire !
le debugger m'affiche l'erreur suivante [error] invalid memory access, (read error at adress 0)
!??? Etant vraiment tres novice en matiere de DLL, je pense que j'oublie certainement quelquechose. Encore une fois je m'en remets à ta patience.
merci
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Bienvenue parmis nousje ne prend pas la peine de répondre au dernier post qui m'insulte de poireau et autre noms d'oiseau je pense que cela n'en vaut pas la peine. A part que cela vous dégoute d'echanger avec d'autre internautes.

Ca a pas l'air comme ça...mais c'est presque un "bienvenue" de la part de notre ami DOBRO

Il est vrai que les termes sont peut etre un peu dénués de vaseline....mais bon !!!
Tu aprendras a le connaitre, il aboit....mais il mord pas souvent.
Par contre il rend aussi de sacré services...il rammene le journal, ramasse les clefs ...

Pas d'inquietude, tu es le bienvenu ici

Si on ne vérifie pas le succès d'une fonction, on s'expose à des crashs.
Code : Tout sélectionner
ht.f= 100
tx.f = 0.196
Prototype.f Calcul_TTC(ht.f, tx.f)
If OpenLibrary(0, "CallTTC.dll")
Calcul_TTC.Calcul_TTC = GetFunction(0,"Calcul_TTC")
If Calcul_TTC = 0
Debug "Fonction non trouvée dans la DLL ..."
End
EndIf
Else
Debug "DLL non trouvée..."
End
EndIf
Debug Calcul_TTC(ht,tx)
Génial !
Impeccable ! ca fonctionne. je viens de comprendre mon erreur.
car ton script ainsi que celui de l bator fonctionnent parfaitement.
Grace à tes controle j'ai pu constater que mon programme ne trouvait finalement pas la dll.
c'était pourtant bete !
merci encore
car ton script ainsi que celui de l bator fonctionnent parfaitement.
Grace à tes controle j'ai pu constater que mon programme ne trouvait finalement pas la dll.
c'était pourtant bete !
merci encore
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
... çà dépend ...!Kwai chang caine a écrit :Un truc que je pige pas, GNOZAL OU CPL
On est obligé de passer par les PROTOTYPES ???
En général, non, mais c'est plus joli et plus puissant.
Des fois, oui, depuis PB 4.40 pour passer des flottants en argument à une fonction définie par un pointeur, car CallFunctionFast() ne supporte plus les flottants, uniquement les entiers.
Un exemple :Historique PB4.40 beta a écrit :- Changed: Call(C)Function(Fast) parameters have been changed from 'Any' to 'Integer'.
Avant :
Code : Tout sélectionner
Global PureCAB_CompressionCallback
...
CallFunctionFast(PureCAB_CompressionCallback, Filename.s, PerCent.f)
Code : Tout sélectionner
Prototype.l Proto_PureCAB_UserCompressionCallback(Filename.s, PerCent.f)
Global PureCAB_UserCompressionCallback.Proto_PureCAB_UserCompressionCallback
...
PureCAB_UserCompressionCallback(Filename.s, PerCent.f)
Dernière modification par gnozal le mer. 26/août/2009 15:14, modifié 1 fois.
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Merci à vous deux pour la reponse 
Ce qui est rigolo, c'est que j'ai essayé de faire marcher le code de BOURDON sans les prototypes, avec la V4.30 et j'suis pas non plus arrivé a remonter le resultat

J'suis dégouté, j'ai tout fait mes "merdegrammes" avec callfunctionnon, mais c'est plus propre que des callfunctions()

Et ben ça va encore faciliter la tache a KCCOui, depuis PB 4.40 pour passer des flottants en argument à une fonction via un pointeur, car CallFunctionFast() ne supporte plus les flottants, uniquement les entiers.

Ce qui est rigolo, c'est que j'ai essayé de faire marcher le code de BOURDON sans les prototypes, avec la V4.30 et j'suis pas non plus arrivé a remonter le resultat
